home *** CD-ROM | disk | FTP | other *** search
/ APDL Eductation Resources / APDL Eductation Resources.iso / programs / admin / marks / !Marks / !Marks (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1994-02-25  |  69.3 KB  |  2,415 lines

  1.  > <Marks$Dir>.!Marks 
  2.  Squished by Lofty's !Shrink vsn 3.02 on 25-Feb-94 
  3. &406C2:
  4. " at line: ";
  5. &406C0:
  6. &400EC,-1,-1
  7. progsize%:pagesize%=1<<&A:freespace%=&8000+progsize%:
  8. =freespace%+pagesize%:
  9. =freespace%:
  10. shell_HeapManagerInit("<Obey$Dir>.",freespace%):
  11. shell_Init:task%=
  12. shell_WimpInit_I(&C8,"Marks Register System"):
  13. shell_ResourcesInit
  14. app_init:
  15. shell_Error
  16. &406C1:
  17. shell_Action(
  18. shell_Poll_I(0,task%)):
  19. _closedown%:
  20. shell_Exit:
  21. app_init:
  22. _Init:
  23. SetUp_Menus:
  24. SetUp_Windows:
  25. SetUp_IconBar:
  26. _Init:_closedown%=
  27. :changed%=
  28. :A%=0:a=0:num%=2:t%=1:texl%=
  29. :tex%=
  30. :csv%=
  31. a$(36),b$(36,&F),m$(36),B$(36):file$="MarksFile":me$="":nums%=0:marks%=
  32. SetUp_Menus:
  33. void%:MenuHandle_IconBar%=
  34. shell_MenuNew(
  35. shell_MessageNoArgs("MTIBar")):MenuItem_Info%=
  36. shell_MenuAdd(0,
  37. shell_MessageNoArgs("Info"),""):void%=
  38. shell_MenuAdd(0,
  39. shell_MessageNoArgs("Quit"),"_MenuSelect_Quit")
  40. shell_AttachMenuDBox(MenuItem_Info%,"progInfo","_PreOpenInfo",""):MenuHandle_Main%=
  41. shell_MenuNew("Main Menu"):MenuItem_Info%=
  42. shell_MenuAdd(0,
  43. shell_MessageNoArgs("Info"),""):MenuItem_Enter%=
  44. shell_MenuAdd(0,"Enter Marks","")
  45. MenuItem_Sort%=
  46. shell_MenuAdd(0,"Sort",""):MenuItem_Save%=
  47. shell_MenuAdd(0,"Save (F3)",""):void%=
  48. shell_MenuAdd(0,
  49. shell_MessageNoArgs("Quit"),"_MenuSelect_Quit"):
  50. shell_AttachMenuDBox(MenuItem_Info%,"progInfo","_PreOpenInfo","")
  51. MenuHandle_Sort%=
  52. shell_MenuNew("Sort"):MenuItem_name%=
  53. shell_MenuAdd(0,"By Name","_Sortn"):MenuItem_pos%=
  54. shell_MenuAdd(0,"By Position","_SortP"):
  55. shell_CreateWindowStatic("xfert",xfert%):
  56. shell_CreateWindowStatic("markin",markin%)
  57. shell_AttachSubMenu(MenuItem_Save%,xfert%,""):
  58. shell_AttachSubMenu(MenuItem_Sort%,MenuHandle_Sort%,""):
  59. shell_AttachSubMenu(MenuItem_Enter%,markin%,""):
  60. SetUp_Windows:
  61. shell_CreateWindowStatic("mainw",mainw%):
  62. shell_AttachClickSelect(mainw%,-1,"_ClickSelectMain"):
  63. shell_CreateWindowStatic("xfer_send",xfer%):
  64. shell_CreateWindowStatic("xfer_text",xfertex%)
  65. shell_CreateWindowStatic("xfer_csv",xfercsv%):
  66. shell_AttachClickSelect(xfert%,-1,"_ClickXfert"):
  67. shell_AttachMenu(mainw%,-1,MenuHandle_Main%,0,0,0):
  68. shell_CreateWindowStatic("tesme",tesme%):
  69. shell_CreateWindowStatic("pane",pane%)
  70. shell_IconPutData(pane%,0,
  71. $,5,&B),
  72. shell_AttachPane(mainw%,pane%,2,0,0):
  73. shell_AttachMenu(pane%,-1,MenuHandle_Main%,0,0,0):
  74. shell_AttachPane(mainw%,tesme%,4,0,0):
  75. shell_AttachMenu(tesme%,-1,MenuHandle_Main%,0,0,0)
  76. shell_AttachMenu(pane%,3,MenuHandle_Sort%,0,0,0):
  77. shell_AttachBumpHandler(markin%,2,3,6,0,&D,1,
  78. ,"",""):
  79. shell_AttachBumpHandler(pane%,&F,16,17,1,&E,1,
  80. ,"",""):
  81. shell_AttachClickSelect(markin%,-1,"_ClickSelectMarkIn")
  82. shell_AttachClickSelect(pane%,4,"_enter"):
  83. shell_AttachClickSelect(pane%,5,"_save"):
  84. shell_AttachClickSelect(pane%,6,"_clear"):
  85. shell_AttachClickSelect(pane%,16,"_refresh"):
  86. shell_AttachClickSelect(pane%,17,"_refresh")
  87. shell_AttachClickSelect(pane%,0,"_refresh"):
  88. shell_AttachClickSelect(pane%,&A,"_ttotal"):
  89. shell_AttachDataLoad(-1,-1,512,"_FileLoad",
  90. shell_AttachDataLoad(mainw%,-1,512,"_FileLoad",
  91. shell_AttachHotKey("F3",
  92. ,"xfert",xfert%,"","")
  93. shell_AttachDataSave(xfer%,2,&C8,512,1,"_dosave"):
  94. shell_AttachDataSave(xfertex%,2,&C8,&FFF,1,"_dosavetex"):
  95. shell_AttachDataSave(xfercsv%,2,&C8,&DFE,1,"_dosavecsv"):
  96. shell_IconPutData(xfer%,2,file$,
  97. shell_AttachHelpTag(mainw%,&89,"marks")
  98. shell_AttachHelpTag(mainw%,&8A,"ave"):
  99. shell_AttachHelpTag(mainw%,&8B,"pos"):
  100. shell_AttachHelpTag(pane%,0,"date"):
  101. shell_AttachHelpTag(pane%,1,"file"):
  102. shell_AttachHelpTag(pane%,3,"sorter"):
  103. shell_AttachHelpTag(pane%,4,"markenter")
  104. shell_AttachHelpTag(pane%,5,"saver"):
  105. shell_AttachHelpTag(pane%,6,"clear"):
  106. SetUp_IconBar:sicon=
  107. shell_Iconbar(-1,"!"+
  108. shell_GetAppName,"",&78,MenuHandle_IconBar%,0,0,0):
  109. shell_AttachHelpTag(-1,sicon,"iconbar"):
  110. shell_AttachClickSelect(-1,sicon,"_ClickSelect_IconBar"):
  111. _PreOpenInfo(wh%):
  112. shell_IconPutData(wh%,1,
  113. shell_MessageNoArgs("progInfo0"),0):
  114. shell_IconPutData(wh%,2,
  115. shell_MessageNoArgs("progInfo1"),0):
  116. shell_IconPutData(wh%,3,
  117. shell_MessageNoArgs("progInfo2"),0)
  118. shell_IconPutData(wh%,4,
  119. shell_MessageNoArgs("progInfo3"),0):=0
  120. _refresh(wh%,icon%):
  121. mean1:
  122. NSort:
  123. mean2:
  124. refresh:=0
  125. _ClickXfert(wh%,icon%):
  126. ClickXfert:=0
  127. _ClickSelect_IconBar(wh%,icon%):
  128. shell_OpenWindowStatic(mainw%):=0
  129. _Sortn(blk%):
  130. sortn:=0
  131. _enter(button%,icon%):
  132. shell_OpenWindowStatic(markin%):=0
  133. _save(button%,icon%):
  134. shell_OpenWindowDynamic(xfert%,
  135. _clear(wh%,icon%):
  136. clear:
  137. refresh:=0
  138. _dosave(file$):
  139. savemarks(file$):=0
  140. _dosavetex(file$):
  141. savetex(file$):=0
  142. _dosavecsv(file$):
  143. savecsv(file$):=0
  144. _SortP(blk%):
  145. sortp:=0
  146. _ClickSelectMain(wh%,icon%):
  147. shell_CloseWindow(markin%):
  148. _ClickMain(wh%,icon%):=0
  149. _ClickSelectMarkIn(wh%,icon%):
  150. _ClickMarkin(icon%):=0
  151. _FileLoad(addr%,filetype%,FileP$,siz%):fil$=
  152. shell_Leaf(FileP$):
  153. FileLoad(FileP$):=0
  154. _ttotal(wh%,icon%):num%=0:
  155. shell_IconPutData(markin%,9,"Test Totals",
  156. shell_IconPutData(markin%,1,b$(0,t%),
  157. shell_IconPutData(markin%,2,
  158. (t%),
  159. _MenuSelect_Quit(blk%):_closedown%=
  160. FileLoad(file$):
  161. clear:A%=0:
  162. &406C0:X=
  163. (file$):
  164. #X,a$(A%):
  165. #X,b$(A%,B%):m$(A%)=m$(A%)+
  166. ("  "+b$(A%,B%)),2)+" ":
  167. :A%+=1:m$(A%)="":
  168. #X,a$(A%):
  169. #X,b$(A%,B%):m$(A%)=m$(A%)+
  170. ("  "+b$(A%,B%)),2)+" ":
  171. a$(A%)="":
  172. #X:nums%=A%-1
  173. shell_IconPutData(pane%,23,
  174. (nums%),
  175. mean1:
  176. NSort:
  177. mean2:
  178. shell_WindowIsOpen(mainw%)=
  179. shell_OpenWindowStatic(mainw%)
  180. 1file$=
  181. shell_Leaf(FileP$):
  182. &406C1:
  183. refresh:
  184. mean1:@%=&2020104:
  185. 35:X%=0:R%=0:
  186. &D:R%+=1:
  187. b$(A%,J%)="0"b$(A%,J%)="0.01"
  188. (b$(A%,J%))=0
  189. R%-=1:H%=0
  190. (b$(A%,J%))
  191. :X%=X%+H%:
  192. R%<>0
  193. b$(A%,&E)=
  194. (X%/R%)
  195. b$(A%,&E)=""
  196. &400D1,mainw%,&C,-&41A,&4E0,-&A:
  197. :@%=&20004:
  198. NSort:Q%=1:J%=
  199. shell_IconGetData(pane%,&F)):
  200. J%>&EJ%=&D:
  201. shell_IconPutData(pane%,&F,
  202. (J%),
  203. :MAX$="0":
  204. (b$(A%,J%))>
  205. (MAX$)
  206. MAX$=b$(A%,J%)
  207. :P%=0:
  208. (b$(A%,J%))=
  209. (MAX$)
  210. R@%=&20004:b$(A%,&F)=
  211. (Q%)):@%=&2020104:P%+=1:B$(A%)=b$(A%,J%):b$(A%,J%)="-1"
  212. :Q%=Q%+P%:
  213. Q%>=34:
  214. a$(A%)=""b$(A%,&F)=""
  215. .@%=&20004:
  216. b$(A%,J%)>"0"b$(A%,&F)=
  217. (Q%))
  218. Fb$(A%,J%)=B$(A%):
  219. shell_IconPutData(mainw%,&66+A%,b$(A%,&F),
  220. sortp:
  221. &406C0:tee%=
  222. shell_IconGetData(pane%,&F)):
  223. (b$(A%,tee%))<
  224. (b$(A%+1,tee%))
  225. kX$=a$(A%):a$(A%)=a$(A%+1):a$(A%+1)=X$:
  226. &F:b$=b$(A%,B%):b$(A%,B%)=b$(A%+1,B%):b$(A%+1,B%)=b$:f%=
  227. 34:m$(A%)="":
  228. &D:m$(A%)=m$(A%)++
  229. ("  "+b$(A%,B%)),2)+" ":
  230. refresh:
  231. &406C1:
  232. sortn:
  233. &406C0:
  234. namcha(A%):
  235. a$(A%)=""
  236. 7(a$(A%)="zzz":
  237. &F:b$(A%,B%)="":
  238. a$(A%)>a$(A%+1)
  239. =kX$=a$(A%):a$(A%)=a$(A%+1):a$(A%+1)=X$:
  240. &F:b$=b$(A%,B%):b$(A%,B%)=b$(A%+1,B%):b$(A%+1,B%)=b$:
  241. a$(A%)="zzz"a$(A%)=""
  242. Gam$(A%)="":
  243. &D:m$(A%)=m$(A%)+
  244. ("  "+b$(A%,B%)),2)+" ":
  245. namcha(A%):
  246. refresh:
  247. &406C1:
  248. namcha(A%):B%=0:a$(A%)=a$(A%)+" ":L%=
  249. (a$(A%)):
  250. :B%+=1:a$(A%)=
  251. a$(A%),L%-1)+
  252. a$(A%),1):
  253. a$(A%),1)=" ":a$(A%)=
  254. a$(A%),L%-1):
  255. mean2:me$="":
  256. &D:X%=0:R%=0:
  257. a$(I%)=""
  258. b$(I%,J%)>="A"
  259. H%=0:R%-=1
  260. (b$(I%,J%))
  261. :X%=X%+H%:R%=R%+1:
  262. :@%=&20004:
  263. R%=0R%=1
  264. i!m%=X%/R%:
  265. R%)/R%>0.5m%+=1
  266. k)b$(36,J%)=
  267. (m%)+" ":
  268. X%=0b$(36,J%)=""
  269. l!me$=me$+
  270. b$(36,J%),4)+" ":
  271. refresh:
  272. shell_IconPutData(pane%,1,file$,
  273. shell_IconPutData(pane%,&B,m$(0),
  274. shell_IconPutData(pane%,23,
  275. (nums%),
  276. shell_IconPutData(mainw%,A%,a$(A%),
  277. shell_IconPutData(mainw%,34+A%,m$(A%),
  278. shell_IconPutData(mainw%,68+A%,b$(A%,&E),
  279. shell_IconPutData(mainw%,&66+A%,b$(A%,&F),
  280. &400D1,-1,0,0,&73A,&73A:
  281. :A%=0:
  282. shell_IconPutData(tesme%,1,me$,
  283. _ClickMain(wh%,icon%):
  284. icon%
  285. 0:A%=0:
  286. :A%+=1:a$(A%)=
  287. shell_IconGetData(mainw%,A%):
  288. shell_IconPutData(markin%,9,a$(icon%),
  289. a$(A%)="":nums%=A%-1:
  290. refresh
  291. :num%=icon%:
  292. shell_IconPutData(markin%,9,a$(icon%),
  293. shell_IconPutData(markin%,1,b$(num%,t%),
  294. shell_IconPutData(markin%,2,
  295. (t%),
  296. _ClickMarkin(icon%):t%=
  297. shell_IconGetData(markin%,2)):
  298. icon%=3
  299. icon%=6
  300. shell_IconPutData(markin%,1,b$(num%,t%),
  301. b$(num%,t%)=
  302. shell_IconGetData(markin%,1):
  303. num%=0a$(num%)=
  304. shell_IconGetData(pane%,&A)
  305. a$(num%)=
  306. shell_IconGetData(mainw%,num%)
  307. Lm$(num%)="":
  308. &D:m$(num%)=m$(num%)+
  309. ("  "+b$(num%,A%)),2)+" ":
  310. icon%=8:num%+=1:
  311. num%=34num%=1:
  312. icon%=7:num%-=1:
  313. num%=-1num%=0:
  314. icon%=0:num%+=1:
  315. num%=34num%=1:
  316. num%=0
  317. shell_IconPutData(pane%,&B,m$(num%),
  318. shell_IconPutData(markin%,9,"Test Totals:",
  319. shell_IconPutData(markin%,1,b$(num%,t%),
  320. shell_IconPutData(markin%,9,a$(num%),
  321. mean1:
  322. NSort:
  323. mean2:
  324. refresh:
  325. ClickXfert:
  326. icon%=3:marks%=
  327. :csv%=
  328. :tex%=
  329. :texl%=
  330. icon%=4:csv%=
  331. :tex%=
  332. :texl%=
  333. :marks%=
  334. icon%=5:tex%=
  335. :texl%=
  336. :marks%=
  337. :csv%=
  338. icon%=9:texl%=
  339. :tex%=
  340. :marks%=
  341. :csv%=
  342. icon%=0:
  343. tex%=
  344. shell_OpenWindowStatic(xfertex%):
  345. shell_CloseWindow(xfert%)
  346. csv%=
  347. shell_OpenWindowStatic(xfercsv%):
  348. shell_CloseWindow(xfert%)
  349. marks%=
  350. shell_OpenWindowStatic(xfer%):
  351. shell_CloseWindow(xfert%)
  352. texl%=
  353. shell_OpenWindowStatic(xfertex%):
  354. shell_CloseWindow(xfert%)
  355. savemarks(file$):X=
  356. file$:a$(0)="Test Totals:":A%=-1:
  357. :A%+=1:
  358. #X,a$(A%):
  359. #X,b$(A%,B%):
  360. a$(A%)=""
  361. A%>1:
  362. ("SetType "+file$+" &200"):
  363. shell_CloseWindow(xfer%):
  364. savetex(file$):*FX3,2
  365. "SPOOL "+file$:
  366. text:*SPOOL
  367. *FX3,0
  368. ("SetType "+file$+" &FFF"):A=1:
  369. shell_CloseWindow(xfertex%):
  370. savecsv(file$):*FX3,2
  371. "SPOOL "+file$:A%=0:head$=",":
  372. A%+=1:head$=head$+
  373. (A%)+",":
  374. b$(1,A%)="":
  375. """"+"Name"+""""+head$+""""+"Average"+""""+","+""""+"Position"+"""":
  376. :A%=0:
  377. :A%+=1:B%=0:m$(A%)=",":
  378. :B%+=1:m$(A%)=m$(A%)+b$(A%,B%)+",":
  379. b$(A%,B%)=""
  380. """"+a$(A%)+""""+m$(A%)+b$(A%,&E)+","+b$(A%,&F):
  381. a$(A%)="":*SPOOL
  382. ("SetType "+file$+" &DFE"):*FX3,0
  383. text:
  384. tex%=
  385. fil$;"        ";
  386. $,5,&B);"  ";
  387. "Pupil's Name  \   Test  1  2  3  4  5  6  7  8  9 10 11 12 13  Mean Pos";
  388. a$(A%)+"                          ",22);" ";m$(A%);" ";
  389. b$(A%,&E)+"   ",5);" ";b$(A%,&F);
  390. texl%=
  391. fil$;
  392. "Pupil's Name";
  393. a$(A%)+"                  ",22);
  394. clear:
  395. 34:a$(A%)="":m$(A%)="":
  396. &F:b$(A%,B%)="":
  397. :nums%=0:
  398. shell_IconGetFlags(b%,g%):
  399. j%,a%:a%=
  400. shell_HeapBlockFetch(50):a%!0=b%:a%!4=g%:
  401. &400CE,,a%:j%=a%!24:
  402. shell_HeapBlockReturn(a%):=j%
  403. shell_HeapManagerInit(path$,space%):
  404. heap_code%900:
  405. ("LOAD "+path$+"heapcode "+
  406. ~heap_code%):
  407. heap_code%+0,space%:
  408. shell_Init:
  409. elist%,loop%,temp%,cmdline$:
  410. OSVarBuff%,shell_AppDir$,shell_AppName$:
  411. _U%330,_shell_blk%260:_Q%=
  412. shell_HeapBlockFetch(&BB8):elist%=
  413. shell_HeapBlockFetch(48):elist%!0=0:elist%!4=0:elist%!8=0:elist%!&C=0:elist%!16=0:elist%!20=0:elist%!24=0
  414. elist%!28=0:elist%!32=0:elist%!36=0:elist%!40=0:elist%!44=0:_U%!0=0:_U%!4=0:_U%!8=0:_U%!&C=elist%:_U%!16=1:_U%!20=0:_U%!24=0:_U%!28=0:_U%!32=0:_U%!36=0:_U%!40=0:_U%!44=-1:_U%!48=0:_U%!52=0:_U%!56=0:_U%!60=0:_U%!64=0:_U%!68=0:_U%!72=0
  415. _U%!76=
  416. shell_HeapBlockFetch(256):_U%!80=0:_U%!84=-1:_U%!88=0:_U%!92=0:_U%!96=0:_U%!&64=0:_U%!&68=0:_U%!&6C=-1:_U%!&70=-1:_U%!&74=-1:_U%!&78=-1:_U%!&7C=-1:_U%!&80=0:_U%!&84=0:_U%!&88=-1:_U%!&8C=-1:_U%!&90=-1:_U%!&94=0:_U%!&98=0:_U%!&9C=0:_U%!&A0=0
  417. _U%!&A4=0:_U%!&A8=0:_U%!&AC=0:_U%!&B0=0:_U%!&B4=0:_U%!&B8=0:_U%!&BC=0:_U%!&C0=0:_U%!&C4=0:_U%!&C8=0:_U%!&CC=0:_U%!&D0=-1:_U%!&D4=-1:_U%!&D8=0:_U%!&DC=0:_U%!&E0=0:_U%!&E4=0:_U%!&E8=
  418. shell_HeapBlockFetch(256):_U%!&EC=
  419. shell_HeapBlockFetch(256)
  420. _U%!&F0=-1:_U%!&F4=0:_U%!&F8=0:_U%!&FC=0:_U%!256=0:_U%!260=1:_U%!264=0:_U%!268=0:_U%!272=0:_U%!276=0:_U%!280=0:_U%!284=0:_U%!288=-1:_U%!292=-1:_U%!296=-1:_U%!300=0:_U%!304=0:_U%!308=0:_U%!312=0:_U%!316=0:_U%!320=0:_U%!324=0
  421. shell_MemFill(_U%!&E8,256,0):
  422. shell_MemFill(_U%!&EC,256,0):OSVarBuff%=
  423. shell_HeapBlockFetch(256):shell_AppDir$=
  424. shell_OSVarGetVal(OSVarBuff%,256,"Obey$Dir",1):
  425. shell_HeapBlockReturn(OSVarBuff%):shell_AppName$=
  426. shell_Leaf(shell_AppDir$),2)
  427. _U%!&BC=
  428. shell_HeapBlockFetch((
  429. shell_AppDir$)+1):_U%!&C4=
  430. shell_HeapBlockFetch((
  431. shell_AppName$)+1):temp%=_U%!&BC:$temp%=shell_AppDir$:temp%=_U%!&C4:$temp%=shell_AppName$:cmdline$=
  432. shell_OSReadCommandArg(1):
  433. cmdline$<>""
  434. a_U%!&64=_U%!&64
  435. 1<<5:temp%=
  436. shell_HeapBlockFetch(
  437. cmdline$+1):$(temp%)=cmdline$:_U%!324=temp%
  438. shell_WimpInit_I(Version%,TaskName$):
  439. &400C0,Version%,&4B534154,TaskName$
  440. Version%,Taskid%:_U%!&94=Taskid%:
  441. &81682,Taskid%:=Taskid%
  442. shell_ResourcesInit:
  443. shell_AppDataDir$,temp%,shell_AppName$,shell_AppDir$:
  444. OSVarBuff%,YEigFactor%,XEigFactor%:shell_AppName$=
  445. shell_GetAppName:shell_AppDir$=
  446. shell_GetAppDir:OSVarBuff%=
  447. shell_HeapBlockFetch(256)
  448. shell_OSVarExists(OSVarBuff%,shell_AppName$+"Res$Path")
  449. _U%!&64=_U%!&64
  450. shell_OSVarExists(OSVarBuff%,shell_AppName$+"Data$Dir")
  451. shell_AppDataDir$=
  452. shell_OSVarGetVal(OSVarBuff%,256,shell_AppName$+"Data$Dir",1):_U%!&C0=
  453. shell_HeapBlockFetch((
  454. shell_AppDataDir$)+1):temp%=_U%!&C0:$temp%=shell_AppDataDir$
  455. _U%!&C0=
  456. shell_HeapBlockFetch((
  457. shell_AppDir$)+1):temp%=_U%!&C0:$temp%=shell_AppDir$
  458. _U%!&64
  459. shell_FileExists(shell_AppName$+"Res:Messages")
  460. shell_MessagesInit(shell_AppName$+"Res:Messages",_U%!68,_U%!64)
  461. shell_FileExists(shell_AppName$+"Res:ShellMsgs")
  462. shell_MessagesInit(shell_AppName$+"Res:ShellMsgs",_U%!280,_U%!284)
  463. shell_MessagesInit("ShellSysRes:ShellMsgs",_U%!280,_U%!284)
  464. &20035,-1,4
  465. ,,XEigFactor%:
  466. &20035,-1,5
  467. ,,YEigFactor%:
  468. YEigFactor%=1
  469. shell_FileExists(shell_AppName$+"Res:Sprites22")
  470. @_U%!16=
  471. shell_SpriteAreaLoad(shell_AppName$+"Res:Sprites22")
  472. shell_FileExists(shell_AppName$+"Res:Sprites")
  473. >_U%!16=
  474. shell_SpriteAreaLoad(shell_AppName$+"Res:Sprites")
  475. _U%!16=1
  476. shell_FileExists(shell_AppName$+"Res:Templates")
  477. shell_TemplatesInit(shell_AppName$+"Res:Templates")
  478. shell_FileExists(shell_AppDir$+".Messages")
  479. shell_MessagesInit(shell_AppDir$+".Messages",_U%!68,_U%!64)
  480. shell_FileExists(shell_AppDir$+".ShellMsgs")
  481. shell_MessagesInit(shell_AppDir$+".ShellMsgs",_U%!280,_U%!284)
  482. shell_MessagesInit("ShellSysRes:ShellMsgs",_U%!280,_U%!284)
  483. &20035,-1,4
  484. ,,XEigFactor%:
  485. &20035,-1,5
  486. ,,YEigFactor%:
  487. YEigFactor%=1
  488. shell_FileExists(shell_AppDir$+".Sprites22")
  489. <_U%!16=
  490. shell_SpriteAreaLoad(shell_AppDir$+".Sprites22")
  491. shell_FileExists(shell_AppDir$+".Sprites")
  492. :_U%!16=
  493. shell_SpriteAreaLoad(shell_AppDir$+".Sprites")
  494. _U%!16=1
  495. shell_FileExists(shell_AppDir$+".Templates")
  496. shell_TemplatesInit(shell_AppDir$+".Templates")
  497. &45BC0:
  498. shell_HeapBlockReturn(_Q%):_Q%=
  499. shell_HeapBlockFetch(&400):
  500. shell_HeapBlockReturn(OSVarBuff%):
  501. shell_Error:
  502. pos%,report$:
  503. <>&D00
  504. <>&903
  505. &606C2:
  506. shell_OSCheckVersion(3)
  507. shell_FileExists("Resources:$.Resources.Edit.ThrowBack")
  508. shell_Exit:
  509. ("Set Basic$File <"+
  510. shell_GetAppName+"$BasicFile>"):
  511. "Edit:ThrowBack"
  512. shell_ErrorBox("Unexpected error:- "+
  513. $+" Internal error code "+
  514. pos%=
  515. $,"in "+
  516. 34+"EvntShellSystem:ShellLib"):
  517. pos%>0
  518. report$=
  519. $,pos%-1)
  520. shell_ErrorBox(report$)
  521. &606C2:
  522. shell_Action(evnt%):
  523. fn$,menu%,menu$,select$,menu_buffer%,mx%,my%,claimed%:
  524. wh%,ih%,void%,_temp28%,_temp32%,_temp24%,_temp%,fontmenuflag%:
  525. CheckSelect%,offset%:
  526. evnt%
  527. shell_RedrawWindow(_Q%!0)
  528. shell_OpenWindow(_Q%!0,
  529. shell_CloseWindow(_Q%!0)
  530. 6:_U%!28=_Q%!&C:_U%!32=_Q%!16:mx%=_Q%!0:my%=_Q%!4:_U%!272=_Q%!0:_U%!276=_Q%!4:_U%!320=_Q%!8:_temp28%=_Q%!&C:_temp32%=_Q%!16:ih%=_Q%!16:
  531. _Q%!&C=_U%!288
  532. _Q%!16=_U%!292
  533. shell_HandleBumpIcons(_U%!296,_Q%!&C,_Q%!16,_Q%!8)
  534. _U%!288=-1:_U%!292=-1:_U%!296=-1:
  535. _Q%!16>=0
  536. offset%=
  537. shell_GetEventListOffset(_Q%!&C,_Q%!16,_U%+&68,16,0):
  538. offset%>=0
  539. shell_HandleBumpIcons(offset%,_Q%!&C,_Q%!16,_Q%!8)
  540. (_Q%!8=64)
  541. ;result%=
  542. shell_IconIsDraggable(_Q%!&C,_Q%!16):
  543. result%
  544. ?mess$="Icon is draggable":
  545. shell_IconDragBox(_Q%!&C,_Q%!16)
  546. mess$="Icon is not draggable"
  547. shell_Tracef0("Action:"+mess$)
  548. _Q%!8
  549. shell_ActionSelectButton
  550. shell_ActionMenuButton
  551. shell_ActionAdjustButton
  552. _U%!&64
  553. &42401:_U%!&64=_U%!&64
  554. :_U%!&80=0:fn$=
  555. shell_GetEventHandler(_U%!28,_U%!32,6):
  556. fn$<>""
  557. shell_Tracef0("Action:Drag event detected - function is "+fn$):void%=
  558. ("FN"+fn$+"(_temp28%,_temp32%)")
  559. shell_Tracef0("Action:Drag event detected - no handler function"):
  560. shell_SendDataSave(_U%!28,_U%!32)
  561. shell_Tracef0("Action:keypress is="+
  562. _Q%!24):
  563. _Q%!24
  564. &D,394,398,399,410:claimed%=
  565. shell_WritableIconHandler(_Q%!0,_Q%!4,_Q%!24)
  566. claimed%=
  567. shell_HotKeyProcess(_Q%!24)
  568. claimed%
  569. shell_Tracef0("Action:Keypress not claimed, passing it on"):
  570. &400DC,_Q%!24
  571. shell_Tracef0("Action:Keypress claimed by this application")
  572. shell_ActionMenuSelect(_Q%)
  573. 17,18:
  574. shell_Receive(_Q%)
  575. shell_UserMessageAcknowledge(_Q%)
  576. shell_Poll_I(mask%,task%):
  577. &400C7,mask%,_Q%
  578. &81686,a%,,task%:=a%
  579. shell_Exit:
  580. ms_desc%:ms_desc%=_U%!68:
  581. &61504,ms_desc%:
  582. &2001E,7,,ms_desc%:
  583. shell_TraceExit:
  584. &606C2:
  585. &600D0,,-1:
  586. shell_WimpCloseDown_I(_U%!&94):
  587. shell_MenuNew(title$):
  588. handle%:
  589. &45BC1,,title$
  590. handle%:=handle%
  591. shell_MessageNoArgs(tag$):=
  592. shell_MessageLookup(tag$,"","")
  593. shell_MenuAdd(handle%,item$,sel_fn$):
  594. ret_handle%:
  595. sel_fn$<>""
  596. &45BC2,handle%,item$,sel_fn$
  597. ret_handle%
  598. &45BC2,handle%,item$
  599. ret_handle%
  600. :=ret_handle%
  601. shell_AttachMenuDBox(item%,window$,preopenfn$,postopenfn$):
  602. blk%,temp%,addr%:
  603. shell_WindowLoaded(window$)
  604. shell_MessageOneArg("SHELLMSG03",window$)
  605. blk%=
  606. shell_HeapBlockFetch(&C):blk%!0=
  607. shell_HeapBlockFetch(
  608. window$+1):temp%=blk%!0:$temp%=window$:blk%!4=
  609. shell_HeapBlockFetch(
  610. preopenfn$+1):temp%=blk%!4:$temp%=preopenfn$:blk%!8=
  611. shell_HeapBlockFetch(
  612. postopenfn$+1):temp%=blk%!8:$temp%=postopenfn$
  613. &45BCE,item%,blk%:
  614. &45BCC,,
  615. shell_CreateWindowStatic(ident$,
  616. handle%):
  617. wb_ptr%,w_list%,temp%,offset%:wb_ptr%=
  618. shell_GetWB(ident$):wb_ptr%!64=_U%!16:
  619. &400C1,,wb_ptr%
  620. handle%:w_list%=_U%!&B8:
  621. w_list%=0
  622. S_U%!&B8=
  623. shell_HeapBlockFetch(8):w_list%=_U%!&B8:w_list%!0=handle%:w_list%!4=-1
  624. offset%=
  625. shell_SearchStatic(_U%!&B8,handle%):
  626. offset%=-1
  627. 7offset%=
  628. shell_SearchStatic(_U%!&B8,0):
  629. offset%=-1
  630. actr%=0:
  631. w_list%!ctr%<>-1:ctr%+=4:
  632. :_U%!&B8=
  633. shell_HeapBlockExtend(_U%!&B8,4):w_list%=_U%!&B8
  634. ctr%=offset%
  635. :temp%=w_list%+ctr%:temp%!0=handle%:temp%!4=-1
  636. shell_AttachSubMenu(item%,submenu%,warn_fn$):
  637. &45BCE,item%,submenu%:
  638. warn_fn$<>""
  639. &45BCC,,
  640. shell_EventListMenuWarn(item%,submenu%,warn_fn$,"")
  641. shell_AttachClickSelect(wh%,ic%,fn$):
  642. shell_EventAdd(wh%,ic%,2,0,fn$):
  643. shell_AttachMenu(wh%,ic%,menu%,shift%,ctrl%,alt%):
  644. offset%:
  645. wh%>0
  646. ic%>=0
  647. shell_IconSetButtonType(wh%,ic%,3)
  648. shell_EventAdd(wh%,ic%,0,menu%,""):
  649. shell_IconPutData(whandle%,ihandle%,data$,redraw):
  650. blk%,old_str$:old_str$=
  651. shell_IconGetData(whandle%,ihandle%):
  652. data$<>old_str$
  653. gblk%=
  654. shell_HeapBlockFetch(40):blk%!0=whandle%:blk%!4=ihandle%:
  655. &400CE,,blk%:
  656. (blk%!24
  657. (1<<8))<>0
  658. data$>blk%!36
  659. shell_MessageNoArgs("SHELLMSG12")
  660. $(blk%!28)=data$
  661. $(blk%+28)=
  662. data$,&B)
  663. redraw<>0
  664. %blk%!8=0:blk%!&C=0:
  665. &400CD,,blk%
  666. shell_HeapBlockReturn(blk%)
  667. shell_AttachPane(wh%,
  668. pane_handle%,flags%,x_off%,y_off%):
  669. blk%,offset%,temp%,nr_pane_events%,pane_flags%:
  670. shell_Tracef0("AttachPane:Attaching Pane Handler"):pane_flags%=
  671. shell_WindowGetFlags(pane_handle%):
  672. (pane_flags%
  673. 1<<5)=0
  674. shell_Tracef0("AttachPane:'Pane' bit of pane window is not set, fixing.."):
  675. shell_WindowToggleFlags(pane_handle%,1<<5)
  676. (pane_flags%
  677. 1<<1)
  678. shell_Tracef0("AttachPane:'Moveable' bit of pane window is set, fixing.."):
  679. shell_WindowToggleFlags(pane_handle%,1<<1)
  680. :offset%=
  681. shell_GetEventListOffset(wh%,-1,_U%+92,24,
  682. offset%<0
  683. shell_Tracef0("AttachPane:Creating pane event block"):offset%=
  684. shell_GetEventListOffset(wh%,-1,_U%+92,24,
  685. ):blk%=_U%!92+offset%:blk%!0=wh%:blk%!4=-1:blk%!8=
  686. shell_HeapBlockFetch(4):blk%!&C=
  687. shell_HeapBlockFetch(4):blk%!16=
  688. shell_HeapBlockFetch(4)
  689. blk%!20=
  690. shell_HeapBlockFetch(4):temp%=blk%!8:!temp%=-1:temp%=blk%!&C:!temp%=-1:temp%=blk%!16:!temp%=-1:temp%=blk%!20:!temp%=-1
  691. :blk%=_U%!92+offset%:temp%=blk%!8:ctr%=0:nr_pane_events%=0:
  692. temp%!ctr%<>-1:ctr%+=4:nr_pane_events%+=1:
  693. :blk%!8=
  694. shell_HeapBlockExtend(blk%!8,4):temp%=blk%!8:temp%!(nr_pane_events%*4)=pane_handle%:temp%!((nr_pane_events%+1)*4)=-1
  695. blk%!&C=
  696. shell_HeapBlockExtend(blk%!&C,4):temp%=blk%!&C:temp%!(nr_pane_events%*4)=flags%:temp%!((nr_pane_events%+1)*4)=-1:blk%!16=
  697. shell_HeapBlockExtend(blk%!16,4):temp%=blk%!16:temp%!(nr_pane_events%*4)=x_off%:temp%!((nr_pane_events%+1)*4)=-1
  698. blk%!20=
  699. shell_HeapBlockExtend(blk%!20,4):temp%=blk%!20:temp%!(nr_pane_events%*4)=y_off%:temp%!((nr_pane_events%+1)*4)=-1:
  700. shell_AttachBumpHandler(wh%,ih%,incr%,decr%,l_limit%,u_limit%,step%,wrap%,disp_fn$,decode_fn$):
  701. e_blk%,offset%,temp%,temp2%,bump_info_blk%:offset%=
  702. shell_GetEventListOffset(wh%,incr%,_U%+&68,16,
  703. ):e_blk%=_U%!&68+offset%
  704. e_blk%!0=wh%:e_blk%!4=incr%:e_blk%!8=step%:e_blk%!&C=
  705. shell_HeapBlockFetch(24):bump_info_blk%=e_blk%!&C:bump_info_blk%!0=ih%:bump_info_blk%!4=l_limit%:bump_info_blk%!8=u_limit%:
  706. disp_fn$>0
  707. dbump_info_blk%!&C=
  708. shell_HeapBlockFetch((
  709. disp_fn$)+1):temp2%=bump_info_blk%!&C:$temp2%=disp_fn$
  710. bump_info_blk%!&C=0
  711. decode_fn$>0
  712. hbump_info_blk%!16=
  713. shell_HeapBlockFetch((
  714. decode_fn$)+1):temp2%=bump_info_blk%!16:$temp2%=decode_fn$
  715. bump_info_blk%!16=0
  716. wrap%=-1
  717. bump_info_blk%!20=1
  718. bump_info_blk%!20=0
  719. offset%=
  720. shell_GetEventListOffset(wh%,decr%,_U%+&68,16,
  721. ):e_blk%=_U%!&68+offset%:e_blk%!0=wh%:e_blk%!4=decr%:e_blk%!8=step%*(-1):e_blk%!&C=bump_info_blk%:
  722. shell_AttachDataLoad(wh%,ih%,type%,fn$,no_load%):
  723. blk%,temp%,offset%,cmdline$:
  724. shell_Tracef0("AttachDataLoad:Attaching DataLoad Handler"):
  725. wh%=-1
  726. wh%=-2
  727. no_load%
  728. type%=type%
  729. 1<<31
  730. 2boffset%=
  731. shell_GetEventListOffset(wh%,ih%,_U%+96,16,
  732. ):blk%=_U%!96+offset%:
  733. blk%!0=0
  734. blk%!4=0
  735. shell_Tracef0("AttachDataLoad:This is the first DataLoad Event..."):blk%!0=wh%:blk%!4=ih%:blk%!8=
  736. shell_HeapBlockFetch(8):temp%=blk%!8:temp%!0=type%:temp%!4=-1:blk%!&C=
  737. shell_HeapBlockFetch(8):temp%=blk%!&C:temp%!0=
  738. shell_HeapBlockFetch(
  739. (fn$)+1)
  740. A'temp%!4=-1:temp%=temp%!0:$temp%=fn$
  741. shell_Tracef0("AttachDataLoad:This is another DataLoad Event..."):blk%!8=
  742. shell_HeapBlockExtend(blk%!8,4):blk%!&C=
  743. shell_HeapBlockExtend(blk%!&C,4):ctr%=0:temp%=blk%!8:
  744. temp%!ctr%<>-1:ctr%+=4:
  745. :temp%!ctr%=type%:temp%!(ctr%+4)=-1:temp%=blk%!&C
  746. QHtemp%!ctr%=
  747. shell_HeapBlockFetch(
  748. fn$+1):temp%=temp%!ctr%:$temp%=fn$
  749. :cmdline$=
  750. shell_GetCmdLineArgs:
  751. cmdline$<>""
  752. wh%<0
  753. (_U%!&64
  754. 1<<5)
  755. type%
  756. 1<<31
  757. temp%=type%
  758. 1<<31
  759. temp%=type%
  760. shell_FileType(cmdline$)=temp%
  761. shell_MessageSendDataLoad(temp%,cmdline$):_U%!&64=_U%!&64
  762. (1<<5)
  763. shell_AttachHotKey(key$,shift%,ctrl%,alt%,window$,wh%,fn1$,fn2$):
  764. e_list%,offset%,temp%,temp2%,key%,f_key%:f_key%=
  765. _U%!60=0
  766. i8_U%!60=
  767. shell_HeapBlockFetch(24):offset%=0:_U%!&B4=1
  768. offset%=_U%!&B4*24:_U%!60=
  769. shell_HeapBlockExtend(_U%!60,24):_U%!&B4=(_U%!&B4)+1
  770. :e_list%=_U%!60:
  771. "F1":key%=385
  772. "F2":key%=386
  773. "F3":key%=387
  774. "F4":key%=388
  775. "F5":key%=389
  776. "F6":key%=390
  777. "F7":key%=391
  778. "F8":key%=392
  779. "F9":key%=393
  780. "F10":key%=458
  781. "F11":key%=459
  782. key%=(
  783. key$)-64:f_key%=
  784. f_key%
  785. shift%
  786. key%+=16
  787. ctrl%
  788. key%+=32
  789. :temp%=e_list%+offset%:temp%!0=key%:temp%?4=shift%:temp%?5=ctrl%:temp%?6=alt%:temp%!8=
  790. shell_HeapBlockFetch(
  791. window$+1):temp2%=temp%!8:$temp2%=window$:
  792. wh%>0
  793. _offset%=
  794. shell_SearchStatic(_U%!&B8,wh%):
  795. offset%=-1
  796. shell_MessageNoArgs("SHELLMSG09")
  797. :temp%!&C=wh%:temp%!16=
  798. shell_HeapBlockFetch(
  799. fn1$+1):temp2%=temp%!16:$temp2%=fn1$:temp%!20=
  800. shell_HeapBlockFetch(
  801. fn2$+1):temp2%=temp%!20:$temp2%=fn2$:
  802. shell_AttachDataSave(wh%,ih%,address%,type%,name_ic%,fn$):
  803. blk%,temp%,offset%:
  804. shell_IconIsSprite(wh%,ih%)
  805. shell_OK(
  806. shell_MessageNoArgs("SHELLMSG29"))
  807. shell_IconSetButtonType(wh%,ih%,6):
  808. address%=0
  809. address%=&64
  810. offset%=
  811. shell_GetEventListOffset(wh%,ih%,_U%+72,24,
  812. ):blk%=_U%!72+offset%:blk%!0=wh%:blk%!4=ih%:blk%!8=address%:blk%!&C=type%:blk%!16=name_ic%:blk%!20=
  813. shell_HeapBlockFetch(
  814. (fn$)+1):temp%=blk%!20:$temp%=fn$:
  815. type%
  816. &FF9:
  817. address%>&8000
  818. ,_U%!&88=
  819. shell_HeapBlockInfo(address%)-8
  820. _U%!&88=address%
  821. address%>&8000
  822. ,_U%!&88=
  823. shell_HeapBlockInfo(address%)-4
  824. _U%!&88=address%
  825. :_U%!&8C=type%:_U%!&90=address%:
  826. shell_AttachHelpTag(wh%,ic%,tag$):
  827. shell_EventAdd(wh%,ic%,8,0,tag$):
  828. shell_Iconbar(pos%,sname$,text$,w%,menu%,shift%,ctrl%,alt%):
  829. handle%:
  830. text$=""
  831. O!_Q%=pos%:_Q%!4=0:_Q%!8=0:_Q%!&C=70:_Q%!16=70:_Q%!20=&301A:$(_Q%+24)=sname$
  832. !_Q%=pos%:_Q%!4=0:_Q%!8=-16:_Q%!&C=w%:_Q%!16=90:_Q%!20=&1700210B:
  833. _Q%!24&C:
  834. _Q%!28
  835. (sname$)+2:$(_Q%!24)=text$:$(_Q%!28)="S"+sname$:_Q%!32=&C
  836. &400C2,,_Q%
  837. handle%:
  838. shell_AttachMenu(-2,handle%,menu%,shift%,ctrl%,alt%):=handle%
  839. shell_GetAppName:
  840. temp%:temp%=_U%!&C4:=$temp%
  841. shell_OpenWindowStatic(handle%):
  842. shell_SearchStatic(_U%!&B8,handle%)>-1
  843. shell_OpenWindow(handle%,0,-1)
  844. shell_OpenWindowDynamic(wh%,x_off%,y_off%):
  845. void%,ptr_blk%:ptr_blk%=
  846. shell_HeapBlockFetch(20):_U%!20=wh%:
  847. &400CF,,ptr_blk%:
  848. &400D4,,wh%,ptr_blk%!0+x_off%,ptr_blk%!4+y_off%:
  849. shell_HeapBlockReturn(ptr_blk%):
  850. shell_CloseWindow(wh%):
  851. offset%,blk%,ptr8%,ptr12%,ptr16%,ptr20%,win_blk%,res%:offset%=
  852. shell_GetEventListOffset(wh%,-1,_U%+308,&C,
  853. offset%>=0
  854. Cblk%=_U%!308+offset%:temp%=blk%!8:res%=
  855. ("FN"+$temp%):
  856. res%=0
  857. :win_blk%=
  858. shell_HeapBlockFetch(60):
  859. wh%>0
  860. Foffset%=
  861. shell_GetEventListOffset(wh%,-1,_U%+92,24,
  862. offset%>-1
  863. blk%=(_U%!92)+offset%:ptr12%=blk%!&C:ptr16%=blk%!16:ptr20%=blk%!20:ctr%=0:ptr8%=blk%!8:
  864. ptr8%!ctr%<>-1:win_blk%!0=ptr8%!ctr%:
  865. &400C6,,win_blk%:ctr%+=4:
  866. :win_blk%!0=wh%:
  867. &400C6,,win_blk%
  868. shell_HeapBlockReturn(win_blk%):
  869. shell_Leaf(path$):
  870. path$,"."):path$=
  871. path$,
  872. path$,".")+1):
  873. :=path$
  874. shell_WindowIsOpen(wh%):=(
  875. shell_WindowGetFlags(wh%)
  876. 1<<16)
  877. shell_IconGetData(whandle%,ihandle%):
  878. result$,icon_blk%:icon_blk%=
  879. shell_HeapBlockFetch(40):icon_blk%!0=whandle%:icon_blk%!4=ihandle%:
  880. &400CE,,icon_blk%:
  881. (icon_blk%!24
  882. (1<<8))<>0
  883. result$=$(icon_blk%!28)
  884. result$=$(icon_blk%+28)
  885. shell_HeapBlockReturn(icon_blk%):=result$
  886. shell_HeapBlockFetch(a%):
  887. addr%:
  888. heap_code%+4,addr%,a%:=addr%
  889. shell_MemFill(start%,nr_bytes%,value%):
  890. I%,nr_words%,remainder%:nr_words%=nr_bytes%
  891. 4:remainder%=nr_bytes%
  892. nr_words%>0
  893. (nr_words%*4)
  894. 4:start%!(I%-1)=value%:
  895. remainder%>0
  896. &Gstart%=start%+(nr_words%*4):
  897. remainder%-1:start%?I%=value%:
  898. shell_OSVarGetVal(buffer%,size%,varname$,expand):
  899. value$,nr_bytes,nameptr%:
  900. &20023,varname$,buffer%,size%,0,-3*(expand=
  901. ,,nr_bytes,nameptr%,type%:
  902. loop%=0
  903. nr_bytes-1:value$=value$+
  904. (buffer%?loop%):
  905. loop%:=value$
  906. shell_HeapBlockReturn(
  907. shell_HeapBlockExists(a%)
  908. heap_code%+8,a%
  909. a%=0:
  910. shell_OSReadCommandArg(opt):
  911. pointer%,command$,offset%:command$="":offset%=0:
  912. pointer%:
  913. pointer%?offset%<>0:command$+=
  914. (pointer%?offset%):offset%+=1:
  915. 1:command$=
  916. command$,
  917. command$,
  918. 34)+1):command$=
  919. command$,
  920. command$,
  921. 34)+2)
  922. :=command$
  923. shell_GetAppDir:
  924. temp%:temp%=_U%!&BC:=$temp%
  925. shell_OSVarExists(buffer%,varname$):
  926. nr_bytes:
  927. &20023,varname$,buffer%,-1,0,0
  928. ,,nr_bytes:
  929. nr_bytes<0
  930. shell_FileExists(object$):
  931. shell_CatInfoRead(object$)="Not Found":=
  932. shell_MessagesInit(filename$,
  933. m_filedesc%,
  934. m_buffer%):
  935. size%,flags%:
  936. 3,"Cannot open message file '"+filename$+"'"
  937. &41500,,filename$
  938. flags%,,size%:
  939. flags%
  940. m_buffer%=0
  941. m_buffer%=
  942. shell_HeapBlockFetch(size%)
  943. 30,6,,,17+
  944. (filename$)
  945. ,,m_filedesc%:$(m_filedesc%+16)=filename$:
  946. &41501,m_filedesc%,m_filedesc%+16:
  947. shell_SpriteAreaLoad(filename$):
  948. sp%,S%,T%:S%=
  949. (filename$):T%=
  950. #S%+16:
  951. #S%:sp%=
  952. shell_HeapBlockFetch(T%):!sp%=T%:sp%!4=0:sp%!8=16:sp%!&C=16:
  953. 46,521,sp%:
  954. 46,522,sp%,filename$:=sp%
  955. shell_TemplatesInit(filename$):
  956. TemplatePtr%,IndirectPtr%,IndirectEnd%,X%,ptr%:
  957. filelen%,pos%,name_buffer%,name$,nr_templates%:
  958. file_offset%,data_size%,entry_type%,char%,identifier$,buff%:
  959. indirected_size%,nr_icons%,total_indirsize%,j%,largest_def%
  960. name_buffer%20:
  961. (name_buffer%
  962. 4):name_buffer%+=1:
  963. :pos%=0:nr_templates%=0:total_indirsize%=0:largest_def%=0:filelen%=
  964. shell_FileLength(filename$):buff%=
  965. shell_HeapBlockFetch(&D):X%=
  966. (filename$):
  967. #X%=16:
  968. :identifier$="":
  969. &C,4,X%,buff%,4
  970. gfile_offset%=!buff%:
  971. shell_Tracef0("TemplatesInit:file offset%  = "+
  972. file_offset%):
  973. file_offset%>0
  974. nr_templates%+=1:indirected_size%=0:
  975. &C,4,X%,buff%,4:data_size%=!buff%:
  976. shell_Tracef0("TemplatesInit:data_size% = "+
  977. data_size%):
  978. &C,4,X%,buff%,4:entry_type%=!buff%:
  979. &C,4,X%,buff%,&C:ctr%=0:
  980. :char%=buff%?ctr%:
  981. char%>31
  982. identifier$+=
  983. char%
  984. ctr%+=1:
  985. char%<32:old_ptr%=
  986. #X%=file_offset%+56:
  987. &C,4,X%,buff%,4:flags%=!buff%:
  988. #X%=file_offset%+72:
  989. &C,4,X%,buff%,&C:indirected_size%+=
  990. shell_IconIndirSize(file_offset%,flags%,buff%):
  991. #X%=file_offset%+84:
  992. &C,4,X%,buff%,4:nr_icons%=!buff%
  993. shell_Tracef0("TemplatesInit:nr icons        = "+
  994. nr_icons%):
  995. nr_icons%>0
  996. nr_icons%-1:
  997. #X%=file_offset%+88+(j%*32)+16:
  998. &C,4,X%,buff%,4:flags%=!buff%:
  999. #X%=file_offset%+88+(j%*32)+20:
  1000. &C,4,X%,buff%,&C:indirected_size%+=
  1001. shell_IconIndirSize(file_offset%,flags%,buff%):
  1002. #X%=old_ptr%:
  1003. shell_Tracef0("TemplatesInit:entry_type%     = "+
  1004. entry_type%):
  1005. shell_Tracef0("TemplatesInit:identifier$     = "+identifier$):
  1006. shell_Tracef0("TemplatesInit:indirected size = "+
  1007. indirected_size%):
  1008. shell_Tracef0(" ")
  1009. itotal_indirsize%+=indirected_size%:
  1010. (88+(nr_icons%*32))>largest_def%
  1011. largest_def%=(88+(nr_icons%*32))
  1012. file_offset%=0:
  1013. shell_HeapBlockReturn(buff%):
  1014. shell_Tracef0("TemplatesInit:total indirected= "+
  1015. total_indirsize%):TemplateBlk%=
  1016. shell_HeapBlockFetch(filelen%):TemplatePtr%=TemplateBlk%:_U%!4=
  1017. shell_HeapBlockFetch(20*nr_templates%)
  1018. IndirectBlk%=
  1019. shell_HeapBlockFetch(largest_def%+total_indirsize%):IndirectPtr%=IndirectBlk%:IndirectEnd%=IndirectBlk%+(largest_def%+total_indirsize%):nr_templates%=0:
  1020. &400D9,,filename$:
  1021. :$name_buffer%="*"
  1022. &400DB,,TemplatePtr%,IndirectPtr%,IndirectEnd%,_U%!&E8,name_buffer%,pos%
  1023. ,,IndirectPtr%,,,name$,pos%:
  1024. pos%<>0
  1025. !((_U%!4)+(16*nr_templates%))=TemplatePtr%:$(((_U%!4)+(16*nr_templates%))+4)=name$:TemplatePtr%+=(88+(TemplatePtr%!84)*32):nr_templates%+=1
  1026. pos%=0:
  1027. &400DA:_U%!0=nr_templates%:
  1028. shell_OSCheckVersion(version%):=
  1029. shell_OSModuleCheckVersion("UtilityModule",version%)
  1030. shell_ErrorBox(r$):
  1031. r%,err_blk%:err_blk%=_shell_blk%:!err_blk%=
  1032. :$(err_blk%+4)=r$+
  1033. =&D00
  1034. =&903
  1035. &600DF,err_blk%,17,"Message from "+
  1036. shell_GetAppName
  1037. &600DF,err_blk%,1,
  1038. shell_GetAppName
  1039. shell_RedrawWindow(handle%):
  1040. more%,fn$,x0%,y0%,blk%,i_blk%:i_blk%=
  1041. shell_HeapBlockFetch(&C):
  1042. &400D6,handle%,i_blk%,&3F0000,&D<<16:
  1043. !i_blk%<>-1
  1044. +fn$=
  1045. shell_IconGetData(handle%,!i_blk%)
  1046. shell_HeapBlockReturn(i_blk%):blk%=
  1047. shell_HeapBlockFetch(&64):
  1048. fn$=""
  1049. ,fn$=
  1050. shell_GetEventHandler(handle%,-1,4)
  1051. :blk%!0=handle%:
  1052. &400C8,,blk%
  1053. more%:x0%=blk%!4-blk%!20:y0%=blk%!16-blk%!24:
  1054. more%:
  1055. &81681,,blk%:
  1056. fn$<>""
  1057. void%=
  1058. ("FN"+fn$+"("+
  1059. blk%+","+
  1060. x0%+","+
  1061. y0%+")")
  1062. &400CA,,blk%
  1063. more%:
  1064. shell_HeapBlockReturn(blk%):
  1065. shell_OpenWindow(wh%,full%,front%):
  1066. offset%,blk%,paneblk%,ctr%,first_pane%,behind%,height%,width%:
  1067. flag%,toggle%,t%,last_pane%,prev_pane%,res%:offset%=
  1068. shell_GetEventListOffset(wh%,-1,_U%+304,&C,
  1069. offset%>=0
  1070. Cblk%=_U%!304+offset%:temp%=blk%!8:res%=
  1071. ("FN"+$temp%):
  1072. res%=0
  1073. :toggle%=
  1074. shell_HeapBlockFetch(&64):t%!0=wh%:
  1075. &400CB,,t%:
  1076. (t%!32
  1077. &80000)=&80000
  1078. toggle%=
  1079. toggle%=
  1080. shell_HeapBlockReturn(t%):_Q%!0=wh%:
  1081. full%
  1082. &400CB,,_Q%
  1083. toggle%
  1084. &400C5,,_Q%
  1085. :offset%=
  1086. shell_GetEventListOffset(wh%,-1,_U%+92,24,
  1087. offset%>-1
  1088. blk%=(_U%!92)+offset%:ptr8%=blk%!8:ptr12%=blk%!&C:ptr16%=blk%!16:ptr20%=blk%!20:_Q%!0=wh%:
  1089. front%
  1090. behind%=-1
  1091. behind%=_Q%!28
  1092. full%
  1093. &400C5,,_Q%:
  1094. &400CB,,_Q%:
  1095. &400C6,,_Q%
  1096. :paneblk%=
  1097. shell_HeapBlockFetch(&400):ctr%=0:
  1098. ptr8%!ctr%<>-1:paneblk%!0=ptr8%!ctr%:
  1099. first_pane%=0
  1100. first_pane%=paneblk%!0
  1101. Glast_pane%=paneblk%!0:
  1102. &400CB,,paneblk%:flag%=ptr12%!ctr%:
  1103. flag%
  1104. 0,1:height%=paneblk%!16-paneblk%!8:width%=paneblk%!&C-paneblk%!4:paneblk%!4=_Q%!4+ptr16%!ctr%:paneblk%!&C=paneblk%!4+width%:paneblk%!16=_Q%!16+ptr20%!ctr%:paneblk%!8=paneblk%!16-height%
  1105. 2:height%=paneblk%!16-paneblk%!8:width%=_Q%!&C-_Q%!4:paneblk%!4=_Q%!4+ptr16%!ctr%:paneblk%!&C=_Q%!&C:paneblk%!16=_Q%!16+ptr20%!ctr%:paneblk%!8=paneblk%!16-height%
  1106. 3:height%=_Q%!16-_Q%!8:width%=paneblk%!&C-paneblk%!4:paneblk%!4=_Q%!4+ptr16%!ctr%:paneblk%!&C=paneblk%!4+width%:paneblk%!16=_Q%!16:paneblk%!8=_Q%!8+ptr20%!ctr%
  1107. 4:height%=paneblk%!16-paneblk%!8:width%=_Q%!&C-_Q%!4:paneblk%!4=_Q%!4+ptr16%!ctr%:paneblk%!&C=_Q%!&C:paneblk%!16=_Q%!8+height%+ptr20%!ctr%:paneblk%!8=paneblk%!16+height%
  1108. 5:height%=_Q%!16-_Q%!8:width%=paneblk%!&C-paneblk%!4:paneblk%!4=_Q%!&C-width%+ptr16%!ctr%:paneblk%!&C=paneblk%!4+width%:paneblk%!16=_Q%!16:paneblk%!8=_Q%!8
  1109. ctr%=0
  1110. paneblk%!28=behind%
  1111. paneblk%!28=prev_pane%
  1112. &400C5,,paneblk%:prev_pane%=paneblk%!0:ctr%+=4:
  1113. toggle%
  1114. V#_Q%!28=last_pane%:
  1115. &400C5,,_Q%
  1116. shell_HeapBlockReturn(paneblk%)
  1117. _Q%!0=wh%:
  1118. full%
  1119. &400CB,,_Q%
  1120. behind%=-2
  1121. _Q%!28=-2
  1122. front%=-1
  1123. _Q%!28=-1
  1124. &400C5,,_Q%
  1125. shell_HandleBumpIcons(offset%,wh%,ih%,_button%):
  1126. display_ih%,info_blk%,e_blk%,curr_val%,_temp$,fn2%:
  1127. new_val%,fn%:
  1128. _button%<>2
  1129. hre_blk%=_U%!&68+offset%:_U%!288=wh%:_U%!292=ih%:_U%!296=offset%:info_blk%=e_blk%!&C:fn2%=info_blk%!16:
  1130. fn2%<>0
  1131. rQ_temp$=
  1132. shell_IconGetData(wh%,info_blk%!0):curr_val%=
  1133. ("FN"+$fn2%+"(_temp$)")
  1134. curr_val%=
  1135. shell_IconGetData(wh%,info_blk%!0))
  1136. _button%=1
  1137. y)_new_val%=curr_val%+((e_blk%!8)*(-1))
  1138. _new_val%=curr_val%+e_blk%!8
  1139. info_blk%!20=0
  1140. _new_val%>info_blk%!8
  1141. _new_val%=info_blk%!8
  1142. _new_val%<info_blk%!4
  1143. _new_val%=info_blk%!4
  1144. _new_val%>info_blk%!8
  1145. _new_val%=info_blk%!4
  1146. _new_val%<info_blk%!4
  1147. _new_val%=info_blk%!8
  1148. :fn%=info_blk%!&C:
  1149. fn%<>0
  1150. 1_new_val$=
  1151. ("FN"+$fn%+"(_new_val%,_button%)")
  1152. _new_val$=
  1153. _new_val%
  1154. _new_val%<>curr_val%
  1155. shell_IconPutData(wh%,info_blk%!0,_new_val$,-1)
  1156. shell_GetEventListOffset(wh%,ih%,event_list%,rec_size%,add%):
  1157. list_size%,ptr%,found%,offset%,empty%,temp%:
  1158. (!event_list%=0
  1159. add%=
  1160. (!event_list%=0)
  1161. [!event_list%=
  1162. shell_HeapBlockFetch(rec_size%):temp%=!event_list%:temp%!0=0:temp%!4=0:=0
  1163. :list_size%=
  1164. shell_HeapBlockInfo(!event_list%)-8:ptr%=0:found%=
  1165. :offset%=-1:empty%=-1:temp%=!event_list%:
  1166. empty%<0
  1167. (temp%!ptr%=0
  1168. temp%!ptr%+4=0)
  1169. empty%=ptr%
  1170. (temp%!ptr%=wh%)
  1171. ih%=-1
  1172. offset%=ptr%:found%=
  1173. temp%!(ptr%+4)=ih%
  1174. offset%=ptr%:found%=
  1175. ptr%+=rec_size%
  1176. ptr%+=rec_size%
  1177. ((ptr%>=list_size%)
  1178. found%):
  1179. found%
  1180. (offset%=-1
  1181. add%)
  1182. empty%<0
  1183. offset%=list_size%:!event_list%=
  1184. shell_HeapBlockExtend(!event_list%,rec_size%):temp%=!event_list%:temp%+=offset%:temp%!0=0:temp%!4=0
  1185. offset%=empty%
  1186. :=offset%
  1187. shell_IconIsDraggable(wh%,ih%):
  1188. flags%:flags%=
  1189. shell_IconGetFlags(wh%,ih%):temp%=(flags%
  1190. &6000):
  1191. temp%=&6000=
  1192. shell_IconDragBox(wh%,ih%):
  1193. blk%,wex,wey,e_offset%,flags%,f%,DragASprite%,spr_area%,valid%,spr$:
  1194. name_ic%,name$:e_offset%=
  1195. shell_GetEventListOffset(wh%,ih%,_U%+72,24,
  1196. e_offset%>=0
  1197. blk%=_U%!72+e_offset%:name_ic%=blk%!16:name$=
  1198. shell_IconGetData(wh%,name_ic%):
  1199. name$=""
  1200. shell_OK(
  1201. shell_MessageNoArgs("SHELLMSG28"))
  1202. blk%=
  1203. shell_HeapBlockFetch(6000):!blk%=wh%:
  1204. &400CC,,blk%:wex=blk%!4-blk%!20:wey=blk%!16-blk%!24:spr_area%=blk%!68:blk%!4=ih%:
  1205. &400CE,,blk%:!blk%=wh%:blk%!4=5:flags%=blk%!24:valid%=blk%!32:blk%!8=blk%!8+wex:blk%!&C=blk%!&C+wey:blk%!16=blk%!16+wex
  1206. blk%!20=blk%!20+wey:blk%!24=0:blk%!28=0:blk%!32=&7FFFFFFF:blk%!36=&7FFFFFFF:
  1207. 6,&A1,28
  1208. ,,f%:DragASprite%=((f%
  1209. 2)=2):
  1210. DragASprite%
  1211. f%=flags%:
  1212. *spr$=
  1213. shell_IconGetCommand(valid%,"s")
  1214. shell_OK(
  1215. shell_MessageNoArgs("SHELLMSG19"))
  1216. spr$<>""
  1217. &42400,&85,spr_area%,spr$,blk%+8:_U%!&64=_U%!&64
  1218. &400D0,,blk%
  1219. &400D0,,blk%
  1220. shell_HeapBlockReturn(blk%)
  1221. shell_Tracef0("IconDragBox:WARNING! no drag handler registered for this icon!")
  1222. shell_Tracef0(a$):
  1223. shell_TraceIsOn)
  1224. _U%!44<>-1
  1225. f%=_U%!44:
  1226. #f%,a$
  1227. _U%!&94>0
  1228. shell_BroadcastMessage(&43B00,"ShellDBug:Trace "+a$)
  1229. shell_ActionSelectButton:
  1230. shell_HandleAttachedMenu(_Q%,_U%!28,_U%!32):fn$=
  1231. shell_GetEventHandler(_U%!28,_U%!32,2):
  1232. _U%!32=0
  1233. shell_DataSaveCheckName(_U%!28,_U%!32)
  1234. fn$<>""
  1235. shell_IconSlab(4,_U%!28,_U%!32):void%=
  1236. ("FN"+fn$+"(_temp28%,_temp32%)")
  1237. _U%!32=0
  1238. _U%!28=_U%!20
  1239. &400D4,,-1
  1240. shell_ActionMenuButton:
  1241. temp%,menu%,popup%:popup%=
  1242. :temp%=
  1243. temp%=
  1244. shiftmenuclick(_Q%!&C,_Q%!16)
  1245. temp%
  1246. 3Zmenu%=
  1247. shell_GetEventMenu(_Q%!8,_Q%!&C,_Q%!16):
  1248. (menu%<>0
  1249. _Q%!&C>0
  1250. _Q%!16>=0)
  1251. popup%=
  1252. menu%=0
  1253. 8.menu%=
  1254. shell_GetEventMenu(_Q%!8,_Q%!&C,-1)
  1255. menu%<>0
  1256. shell_HandleMenuOpen(_Q%,menu%,_Q%!&C,_Q%!16,popup%)
  1257. shell_ActionAdjustButton:
  1258. flags%,fn$,void%,sel_blk%,ctr%:sel_blk%=
  1259. shell_HeapBlockFetch(&64):
  1260. shell_Tracef0("Action:Mouse Button was ADJUST"):
  1261. &400D6,_U%!28,sel_blk%,&F000,&B000:ctr%=0:
  1262. sel_blk%!ctr%<>-1
  1263. sel_blk%!ctr%=_U%!32
  1264. shell_IconSet(_U%!28,_U%!32,1)
  1265. JCctr%+=4:
  1266. :fn$=
  1267. shell_GetEventHandler(_U%!28,_U%!32,3):
  1268. fn$<>""
  1269. shell_IconSlab(1,_U%!28,_U%!32):void%=
  1270. ("FN"+fn$+"(_temp28%,_temp32%)")
  1271. shell_HeapBlockReturn(sel_blk%):
  1272. shell_GetEventHandler(wh%,ic%,e_type%):
  1273. ptr%,event_list%,found%,list_size%,fn$:
  1274. wh%=-1
  1275. wh%=-2
  1276. Wrlist_size%=
  1277. shell_HeapBlockInfo(_U%!&C)-8:ptr%=0:found%=
  1278. :event_list%=_U%!&C:fn$="":
  1279. (event_list%!ptr%=wh%)
  1280. event_list%!(ptr%+4)
  1281. event_list%!(ptr%+(&C+(e_type%*4)))>&8000
  1282. e7fn$=$(event_list%!(ptr%+(&C+(e_type%*4)))):found%=
  1283. ptr%+=48
  1284. event_list%!(ptr%+4)=ic%
  1285. event_list%!(ptr%+(&C+(e_type%*4)))>&8000
  1286. r7fn$=$(event_list%!(ptr%+(&C+(e_type%*4)))):found%=
  1287. ptr%+=48
  1288. ptr%+=48
  1289. ptr%+=48
  1290. ((ptr%>=list_size%)
  1291. found%):=fn$
  1292. shell_SendDataSave(wh%,ih%):
  1293. blk%,msgblk%,tmpblk%,offset%,FileSize%,void%:tmpblk%=
  1294. shell_HeapBlockFetch(30):
  1295. &400CF,,tmpblk%:offset%=
  1296. shell_GetEventListOffset(wh%,ih%,_U%+72,24,
  1297. offset%=-1
  1298. offset%=-2
  1299. gvoid%=
  1300. shell_MessageWindow(
  1301. shell_MessageNoArgs("SHELLMSG13"),0,"",
  1302. shell_MessageNoArgs("warning"))
  1303. blk%=(_U%!72)+offset%:
  1304. blk%!8>&8000
  1305. ,FileSize%=
  1306. shell_HeapBlockInfo(blk%!8)-4
  1307. FileSize%=blk%!8
  1308. :msgblk%=_U%!76:msgblk%!0=256:msgblk%!&C=0:msgblk%!16=1:msgblk%!20=tmpblk%!&C:msgblk%!24=tmpblk%!16:msgblk%!28=tmpblk%!0:msgblk%!32=tmpblk%!4:msgblk%!36=FileSize%:msgblk%!40=blk%!&C:$(msgblk%+44)=
  1309. shell_Leaf(
  1310. shell_IconGetData(wh%,blk%!16))
  1311. &400E7,18,msgblk%,msgblk%!20,msgblk%!24:_U%!&78=_Q%!8:_U%!&88=FileSize%:_U%!&8C=blk%!&C:_U%!&90=blk%!8:_U%!&9C=blk%!4:_U%!&C8=msgblk%!20:_U%!&CC=msgblk%!24
  1312. shell_HeapBlockReturn(tmpblk%):
  1313. shell_WritableIconHandler(wh%,ih%,key%):
  1314. nr_icons%,first_write%,last_write%,ctr%:
  1315. before%,after%,index%,mx%,my%,temp_blk%,caret_blk%:caret_blk%=
  1316. shell_HeapBlockFetch(&400):
  1317. &400D3,,caret_blk%:
  1318. caret_blk%!0=-1
  1319. shell_HeapBlockReturn(caret_blk%):=
  1320. &400D6,wh%,caret_blk%,&40E000,&E000:first_write%=caret_blk%!0:ctr%=0:
  1321. caret_blk%!ctr%=ih%
  1322. :before%=caret_blk%!(ctr%-4):after%=caret_blk%!(ctr%+4)
  1323. :ctr%+=4:
  1324. caret_blk%!ctr%=-1:last_write%=caret_blk%!(ctr%-4):
  1325. shell_FakeMouseClick(wh%,0,4)
  1326. 398,394:
  1327. ih%=last_write%
  1328. &400D2,wh%,first_write%,-1,-1,-1,
  1329. shell_IconGetData(wh%,first_write%))
  1330. &400D2,wh%,after%,-1,-1,-1,
  1331. shell_IconGetData(wh%,after%))
  1332. 399,410:
  1333. ih%=first_write%
  1334. &400D2,wh%,last_write%,-1,-1,-1,
  1335. shell_IconGetData(wh%,last_write%))
  1336. &400D2,wh%,before%,-1,-1,-1,
  1337. shell_IconGetData(wh%,before%))
  1338. shell_HeapBlockReturn(caret_blk%):=
  1339. shell_HotKeyProcess(key%):
  1340. e_list%,list_size%,found%,ptr%,h%,win$,fn1$,fn2$:
  1341. ctrl%,shift%,alt%,x_off%,y_off%,flag%,key_flags%,offset%:
  1342. result%,win_blk%:e_list%=_U%!60:list_size%=_U%!&B4*24:found%=
  1343. :ptr%=0:
  1344. e_list%!ptr%=key%
  1345. found%=
  1346. ptr%+=24
  1347. found%
  1348. ptr%>=list_size%:
  1349. found%
  1350. >temp%=e_list%+ptr%:win$=$(temp%!8):
  1351. (win$<>""
  1352. temp%!&C=0)
  1353. shell_CreateWindow(win$,h%):win_blk%=
  1354. shell_HeapBlockFetch(36):win_blk%!0=h%:
  1355. &400CB,,win_blk%:x_off%=(win_blk%!4-win_blk%!&C)/2:y_off%=(win_blk%!16-win_blk%!8)/2:
  1356. shell_HeapBlockReturn(win_blk%)
  1357. :fn1$=$(temp%!16):
  1358. fn1$<>""
  1359. temp%!&C>0
  1360. (void%=
  1361. ("FN"+fn1$+"("+
  1362. temp%!&C+")")
  1363. void%=
  1364. ("FN"+fn1$+"("+
  1365. h%+")")
  1366. :offset%=
  1367. shell_SearchStatic(_U%!&B8,temp%!&C):
  1368. offset%>-1
  1369. shell_OpenWindowStatic(temp%!&C)
  1370. temp%!&C>0
  1371. shell_MessageNoArgs("SHELLMSG09")
  1372. shell_OpenWindowDynamic(h%,x_off%,y_off%)
  1373. :fn2$=$(temp%!20):
  1374. fn2$<>""
  1375. temp%!&C>0
  1376. (void%=
  1377. ("FN"+fn1$+"("+
  1378. temp%!&C+")")
  1379. void%=
  1380. ("FN"+fn2$+"("+
  1381. h%+")")
  1382. :result%=
  1383. win$="":fn1$="":fn2$="":result%=
  1384. :=result%
  1385. shell_ActionMenuSelect(_Q%):
  1386. handler%,menu_buffer%,CheckSelect%,fontmenuflag%,void%,h_blk%:h_blk%=
  1387. shell_HeapBlockFetch(256):
  1388. &400CF,,_shell_blk%:
  1389. _U%!264=0
  1390. &45BC4,_U%!24,_Q%
  1391. handler%,,h_blk%:
  1392. handler%
  1393. shell_MenuCallHandler(handler%,h_blk%)
  1394. _shell_blk%!8=1
  1395. shell_HeapBlockExists(_U%!&E0)
  1396. ( _temp%=_U%!&E0:
  1397. $_temp%<>""
  1398. ++void%=
  1399. ("FN"+$_temp%+"(_U%!52,_U%!56)")
  1400. shell_OpenMenu(_U%!36,_U%!40,_U%!24)
  1401. _shell_FontMenuSelFN$=""
  1402. shell_HeapBlockReturn(h_blk%):
  1403. shell_Receive(_Q%):
  1404. temp%,void%:
  1405. _Q%!16
  1406. shell_Exit:
  1407. shell_DataSave(_Q%)
  1408. shell_DataSaveAck(_Q%)
  1409. shell_DataLoad(_Q%,
  1410. shell_DataLoadAck(_Q%)
  1411. shell_DataLoad(_Q%,
  1412. shell_RAMFetch(_Q%)
  1413. shell_RAMTransmit(_Q%)
  1414. shell_Message_PreQuit(_Q%)
  1415. _U%!&A4>0
  1416. B&temp%=_U%!&A4:void%=
  1417. ("FN"+$temp%)
  1418. shell_Message_SaveDesktop(_Q%)
  1419. shell_Message_Shutdown(_Q%)
  1420. &502:
  1421. shell_InteractiveHelp(_Q%)
  1422. &400C0:
  1423. shell_MenuWarning(_Q%)
  1424. &400C1:
  1425. shell_Message_ModeChange(_Q%)
  1426. &400C2:
  1427. _U%!&A8>0
  1428. L\temp%=_U%!&A8:void%=
  1429. ("FN"+$temp%+"("+
  1430. (_Q%!4)+","+
  1431. shell_GetString(_Q%+28)+
  1432. 34+")")
  1433. _U%!&D0=-1
  1434. shell_GetString(_Q%+28)="StrongHelp"
  1435. _U%!&D0=_Q%!4:
  1436. shell_StrongHlpMsg("Help_Install -DieWithTask "+
  1437. shell_GetAppDir+"."+
  1438. shell_GetAppName):temp%=_U%!&D8:
  1439. $temp%<>""
  1440. shell_HelpWord($temp%):
  1441. shell_HeapBlockReturn(_U%!&D8):_U%!&D8=0
  1442. &400C3:
  1443. _U%!&AC>0
  1444. [&temp%=_U%!&AC:void%=
  1445. ("FN"+$temp%)
  1446. _Q%!4=_U%!&D0
  1447. _U%!&D0=-1
  1448. &400C7:
  1449. shell_GetString(_Q%+28)="StrongHelp"
  1450. _U%!&D0=_Q%!20
  1451. shell_ScanForHelp
  1452. shell_HandleUnknownMessage2(_Q%)
  1453. shell_UserMessageAcknowledge(_Q%):
  1454. _Q%!16
  1455. shell_AckDataLoad(_Q%)
  1456. shell_AckRAMFetch(_Q%)
  1457. shell_TraceExit:
  1458. _U%!44<>-1
  1459. #(_U%!44):_U%!44=-1
  1460. shell_WimpCloseDown_I(Taskid%):
  1461. shell_LoseFonts:
  1462. &600DD,Taskid%,&4B534154:
  1463. &A1683,Taskid%:
  1464. _U%!&64
  1465. "XImpulse_CloseDown",_U%!&94
  1466. shell_MessageLookup(tag$,arg1$,arg2$):
  1467. flags%,L%,m$,ms_text%,ms_desc%:
  1468. tag$,8)="SHELLMSG"
  1469. %ms_text%=_U%!284:ms_desc%=_U%!280
  1470. ms_text%=_U%!64:ms_desc%=_U%!68
  1471. &61502,ms_desc%,tag$,ms_text%,256,arg1$,arg2$
  1472. ,,,L%;flags%:
  1473. flags%
  1474. ms_text%?L%=&D:m$=$(ms_text%)
  1475. shell_WindowLoaded(window$):
  1476. loop%,found%:
  1477. (window$)>&C
  1478. shell_MessageOneArg("SHELLMSG02",window$)
  1479. Cfound%=
  1480. loop%=0
  1481. (_U%!0)-1:
  1482. $(((_U%!4)+(16*loop%))+4)=window$
  1483. found%=
  1484. :loop%=(_U%!0)-1
  1485. loop%:=found%
  1486. shell_MessageOneArg(tag$,arg1$):=
  1487. shell_MessageLookup(tag$,arg1$,"")
  1488. shell_GetWB(window$):
  1489. loop%,found%:
  1490. (window$)>&C
  1491. shell_MessageOneArg("SHELLMSG02",window$)
  1492. Dfound%=-1:
  1493. loop%=0
  1494. (_U%!0)-1:
  1495. $(((_U%!4)+(16*loop%))+4)=window$
  1496.  found%=loop%:loop%=(_U%!0)-1
  1497. loop%:
  1498. found%>-1
  1499. =!((_U%!4)+(16*found%))
  1500. shell_MessageOneArg("SHELLMSG03",window$)
  1501. shell_SearchStatic(w_list%,handle%):
  1502. found%,ctr%:found%=-1:ctr%=0:
  1503. w_list%<>0
  1504. w_list%!ctr%<>-1:
  1505. w_list%!ctr%=handle%
  1506. found%=ctr%:=found%
  1507. :ctr%+=4:
  1508. :=found%
  1509. shell_HeapBlockExtend(a%,b%):
  1510. heap_code%+&C,a%,b%:=a%
  1511. shell_EventListMenuWarn(item%,submenu_ptr%,warn_fn$,sel_fn$):
  1512. temp%,temp2%,ctr%,e_list%:
  1513. _U%!&DC=0
  1514. _U%!&DC=
  1515. shell_HeapBlockFetch(32):temp%=_U%!&DC:temp%!0=item%:temp%!4=
  1516. shell_HeapBlockFetch(
  1517. warn_fn$+1):$(temp%!4)=warn_fn$:temp%!8=submenu_ptr%:temp%!&C=
  1518. shell_HeapBlockFetch(
  1519. sel_fn$+1):$(temp%!&C)=sel_fn$
  1520. 3temp%!16=-1:temp%!20=-1:temp%!24=-1:temp%!28=-1
  1521. e_list%=
  1522. shell_HeapBlockExtend(_U%!&DC,32):_U%!&DC=e_list%:ctr%=0:
  1523. :ctr%+=16:
  1524. e_list%!ctr%=-1:temp%=_U%!&DC:temp%!ctr%=item%:temp%!(ctr%+4)=
  1525. shell_HeapBlockFetch(
  1526. warn_fn$+1):temp2%=temp%!(ctr%+4):$(temp2%)=warn_fn$:temp%!(ctr%+8)=submenu_ptr%
  1527. temp%!(ctr%+&C)=
  1528. shell_HeapBlockFetch(
  1529. sel_fn$+1):temp2%=temp%!(ctr%+&C):$(temp2%)=sel_fn$:temp%!(ctr%+16)=-1:temp%!(ctr%+20)=-1:temp%!(ctr%+24)=-1:temp%!(ctr%+28)=-1
  1530. shell_EventAdd(wh%,ic%,e_type%,menu%,fn$):
  1531. ptr%,fn%,event_list%,list_size%,found%:
  1532. fn_addr%:ptr%=0:found%=
  1533. wh%=-1
  1534. wh%=-2
  1535. [list_size%=
  1536. shell_HeapBlockInfo(_U%!&C)-8:event_list%=_U%!&C:
  1537. (event_list%!ptr%=wh%)
  1538. event_list%!(ptr%+4)=ic%
  1539. found%=
  1540. ptr%+=48
  1541. ptr%+=48
  1542. (ptr%>=list_size%
  1543. found%):
  1544. found%=
  1545. >ptr%=0:
  1546. (event_list%!ptr%<>0):ptr%+=48:
  1547. ptr%>=list_size%
  1548. _U%!&C=
  1549. shell_HeapBlockExtend(_U%!&C,48):event_list%=_U%!&C:event_list%!(ptr%+0)=0:event_list%!(ptr%+4)=0:event_list%!(ptr%+8)=0:event_list%!(ptr%+&C)=0:event_list%!(ptr%+16)=0:event_list%!(ptr%+20)=0:event_list%!(ptr%+24)=0:event_list%!(ptr%+28)=0
  1550. cevent_list%!(ptr%+32)=0:event_list%!(ptr%+36)=0:event_list%!(ptr%+40)=0:event_list%!(ptr%+44)=0
  1551. :event_list%!(ptr%+0)=wh%:event_list%!(ptr%+4)=ic%:
  1552. menu%<>0
  1553. event_list%!(ptr%+8)=menu%
  1554. :fn_addr%=ptr%+(&C+(e_type%*4)):
  1555. event_list%!fn_addr%<>0
  1556. shell_HeapBlockReturn(event_list%!fn_addr%)
  1557. :fn%=
  1558. shell_HeapBlockFetch(
  1559. fn$+1):$fn%=fn$:event_list%!fn_addr%=fn%:
  1560. shell_IconSetButtonType(wh%,ih%,button_type%):
  1561. button_type%=&C
  1562. button_type%=&D
  1563. shell_MessageOneArg("SHELLMSG23","PROCshell_IconSetButtonType")
  1564. button_type%<0
  1565. button_type%>&F
  1566. shell_MessageOneArg("SHELLMSG22","PROCshell_IconSetButtonType")
  1567. shell_IconSetState(wh%,ih%,button_type%<<&C,&F000):
  1568. shell_WindowGetFlags(wh%):
  1569. flags%,blk%:blk%=
  1570. shell_HeapBlockFetch(36):blk%!0=wh%:
  1571. &400CB,,blk%:flags%=blk%!32:
  1572. shell_HeapBlockReturn(blk%):=flags%
  1573. shell_WindowToggleFlags(
  1574. wh%,mask%):
  1575. blk%,flags%,open%,handle%:open%=
  1576. shell_WindowIsOpen(wh%):blk%=
  1577. shell_HeapBlockFetch(6000):blk%!0=wh%:
  1578. &400CC,,blk%:flags%=blk%!32:flags%=(flags%
  1579. mask%):blk%!32=flags%:
  1580. &400C3,,blk%:
  1581. &400C1,,blk%+4
  1582. handle%
  1583. !blk%=handle%:
  1584. open%
  1585. &400C5,,blk%
  1586. shell_HeapBlockReturn(blk%):
  1587. handle%<>wh%
  1588. shell_UpdateWindowHandle(wh%,handle%):wh%=handle%
  1589. shell_GetCmdLineArgs:
  1590. cmdline$:
  1591. _U%!324<>0
  1592. cmdline$=$(_U%!324)
  1593. :=cmdline$
  1594. shell_FileType(object$):
  1595. type%:
  1596. 8,5,object$
  1597. ,,type%:type%=(type%
  1598. &FFF00)>>>8:=type%
  1599. shell_MessageSendDataLoad(type%,name$):
  1600. m_blk%:m_blk%=
  1601. shell_HeapBlockFetch(256):m_blk%!0=256:m_blk%!4=0:m_blk%!16=5:m_blk%!20=0:m_blk%!28=0:m_blk%!32=0:m_blk%!36=0:m_blk%!40=type%:$(m_blk%+44)=name$+
  1602. &400E7,17,m_blk%,0
  1603. shell_HeapBlockReturn(m_blk%):
  1604. shell_IconIsSprite(wh%,ih%):
  1605. flags%,temp%:flags%=
  1606. shell_IconGetFlags(wh%,ih%):temp%=(flags%
  1607. 1<<1):
  1608. temp%=(1<<1)
  1609. shell_OK(e$):
  1610. &D00,e$
  1611. shell_HeapBlockInfo(a%):
  1612. 29,6,!(heap_code%+28),a%
  1613. ,,,r3:=r3
  1614. shell_HeapBlockExists(addr%):
  1615. void%:
  1616. addr%<&8000
  1617. 99,"No heapblock defined at this address"
  1618.     r+void%=
  1619. shell_HeapBlockInfo(addr%):
  1620. shell_CatInfoRead(object$):
  1621. type%,load_addr%,exec_addr%,length%,atts%,string$:
  1622. 8,5,object$
  1623. type%,,load_addr%,exec_addr%,length%,atts%:
  1624. type%=0
  1625. ="Not Found"
  1626. atts%=51
  1627. string$+="WR "
  1628. atts%=&BB
  1629. string$+="LWR"
  1630. atts%=&88
  1631. string$+="DL "
  1632. string$+=" "+
  1633. shell_StringPadLeading(
  1634. ~load_addr%,"0",8):string$+=" "+
  1635. shell_StringPadLeading(
  1636. ~exec_addr%,"0",8):string$+=" "+
  1637. shell_StringPadLeading(
  1638. ~length%,"0",8):=string$
  1639. shell_FileLength(object$):
  1640. type%,load_addr%,exec_addr%,length%,atts%,string$:
  1641. 8,5,object$
  1642. type%,,load_addr%,exec_addr%,length%,atts%:=length%
  1643. shell_IconIndirSize(file_offset%,flags%,data%):
  1644. size%,valid_offset%,valid_buff%,ctr%,char%:
  1645. (flags%
  1646. &800100)=256
  1647. ,size%=data%!8:
  1648. (flags%
  1649. (data%!4<>-1)
  1650. valid_offset%=data%!4:valid_buff%=
  1651. shell_HeapBlockFetch(256):
  1652. #X%=file_offset%+valid_offset%:
  1653. &C,4,X%,valid_buff%,512:ctr%=0:
  1654. :char%=valid_buff%?ctr%:ctr%+=1:
  1655. char%<32:size%=size%+ctr%:
  1656. shell_HeapBlockReturn(valid_buff%)
  1657. size%=0
  1658. :=size%
  1659. shell_OSModuleCheckVersion(module$,version%):
  1660. blk%,len%:blk%=
  1661. shell_HeapBlockFetch(256):
  1662. ("Set AppName$RISCOS Y"):
  1663. ("RMEnsure "+module$+" "+
  1664. version%+" Set AppName$RISCOS N"):
  1665. &20023,"AppName$RISCOS",blk%,256,0,0
  1666. ,,len%:blk%?len%=&D
  1667. ("Unset AppName$RISCOS"):
  1668. shell_HeapBlockReturn(blk%):
  1669. $blk%="N"
  1670. shell_IconGetFlags(file_offset%,wh%,ih%):
  1671. flags%,blk%:blk%=
  1672. shell_HeapBlockFetch(50):blk%!0=wh%:blk%!4=ih%:
  1673. &400CE,,blk%:flags%=blk%!24:
  1674. shell_HeapBlockReturn(blk%):=flags%
  1675. shell_IconGetCommand(v%,c$):
  1676. I%,result$:
  1677. v%<=0
  1678. result$=""
  1679. shell_StringUpperCase($v%),";"+
  1680. shell_StringUpperCase(c$)):
  1681. result$=""
  1682. result$=
  1683. $(v%+I%),
  1684. $(v%+I%)+";",";")-1)
  1685. :=result$
  1686. shell_TraceIsOn:=_U%!48
  1687. shell_BroadcastMessage(reason_code%,msg$):
  1688. m_blk%,m_len%:m_len%=(
  1689. msg$+30)
  1690. 3:m_blk%=
  1691. shell_HeapBlockFetch(m_len%):m_blk%!&C=0:m_blk%!16=reason_code%:$(m_blk%+20)=msg$+
  1692. (0):m_blk%!0=m_len%:
  1693. &600E7,17,m_blk%,0:
  1694. shell_HeapBlockReturn(m_blk%):
  1695. shell_HandleAttachedMenu(_Q%,wh%,ih%):
  1696. menu%:
  1697. ih%<>-1
  1698. wh%>-1
  1699. 7menu%=
  1700. shell_GetEventMenu(_Q%!8,wh%,ih%):
  1701. menu%<>0
  1702. shell_HandleMenuOpen(_Q%,menu%,wh%,ih%,
  1703. shell_DataSaveCheckName(wh%,ih%):
  1704. offset%,blk%,list_size%:blk%=_U%!72:offset%=0:
  1705. blk%<>0
  1706. Clist_size%=
  1707. shell_HeapBlockInfo(blk%)-8:
  1708. !(blk%+offset%)=wh%
  1709. hname$=
  1710. shell_IconGetData(!blk%,blk%!16):
  1711. name$,".")=0
  1712. shell_OK(
  1713. shell_MessageNoArgs("SHELLMSG01"))
  1714. offset%=list_size%
  1715. :offset%+=24:
  1716. offset%>=list_size%
  1717. shell_IconSlab(button%,wh%,ih%):
  1718. blk%:blk%=
  1719. shell_HeapBlockFetch(50):blk%!8=button%:blk%!&C=wh%:blk%!16=ih%:
  1720. &81680,,blk%:blk%!8=0:
  1721. &81680,,blk%:
  1722. shell_HeapBlockReturn(blk%):
  1723. shiftmenuclick(wh%,ih%):=
  1724. shell_GetEventMenu(button%,wh%,ic%):
  1725. ptr%,event_list%,found%,list_size%,menu%:
  1726. wh%=-1
  1727. wh%=-2
  1728. rlist_size%=
  1729. shell_HeapBlockInfo(_U%!&C)-8:ptr%=0:found%=
  1730. :event_list%=_U%!&C:fn$="":
  1731. (event_list%!ptr%=wh%)
  1732. shell_Tracef0("GetEventMenu:window handle matched.."):
  1733. event_list%!(ptr%+4)=ic%
  1734. 6menu%=event_list%!(ptr%+8):
  1735. menu%=-2
  1736. menu%=_U%!&FC
  1737. found%=
  1738. :ptr%+=48:
  1739. (ptr%>=list_size%
  1740. found%):=menu%
  1741. shell_HandleMenuOpen(_Q%,menu%,wh%,ih%,popup%):
  1742. i_blk%,w_blk%:
  1743. popup%=
  1744. shell_OpenMenu(_Q%!0,_Q%!4,menu%)
  1745. i_blk%=
  1746. shell_HeapBlockFetch(50):w_blk%=
  1747. shell_HeapBlockFetch(36):i_blk%!0=wh%:i_blk%!4=ih%:
  1748. &400CE,,i_blk%:w_blk%!0=wh%:
  1749. &400CB,,w_blk%:
  1750. shell_OpenMenu(w_blk%!4+i_blk%!16+64,_Q%!4,menu%):
  1751. w_blk%!4+i_blk%!16+64,_Q%!4
  1752. shell_HeapBlockReturn(i_blk%):
  1753. shell_HeapBlockReturn(w_blk%)
  1754. shell_IconSet(wh%,ih%,state%):
  1755. state%=0
  1756. shell_IconDeselect(wh%,ih%)
  1757. shell_IconSelect(wh%,ih%)
  1758. shell_MessageWindow(text$,cancel%,progname$,head$):
  1759. keys%,err_blk%:err_blk%=
  1760. shell_HeapBlockFetch(260):!err_blk%=0:$(err_blk%+4)=text$+
  1761. head$=""
  1762. head$="Message from "+progname$
  1763. cancel%
  1764. &400DF,err_blk%,19,head$
  1765. ,keys%
  1766. &400DF,err_blk%,17,head$
  1767. ,keys%
  1768. shell_HeapBlockReturn(err_blk%):=keys%
  1769. shell_FakeMouseClick(wh%,ih%,button%):
  1770. 6,&F,1:_Q%!8=button%:_Q%!&C=wh%:_Q%!16=ih%:
  1771. shell_Action(6):
  1772. shell_CreateWindow(ident$,
  1773. handle%):
  1774. wb_ptr%:wb_ptr%=
  1775. shell_GetWB(ident$):wb_ptr%!64=_U%!16:
  1776. &400C1,,wb_ptr%
  1777. handle%:
  1778. shell_MenuCallHandler(h%,_h_blk%):
  1779. ("FN"+$h%+"(_h_blk%)")
  1780. shell_OpenMenu(x%,y%,m%):
  1781. fn$:fn$=
  1782. shell_GetEventHandler(_U%!28,_U%!32,1):
  1783. fn$<>""
  1784. s'void%=
  1785. ("FN"+fn$+"(_U%!28,_U%!32)")
  1786. shell_Tracef0("OpenMenu:no menumaker function registered")
  1787. m%<>_U%!24
  1788. shell_HeapBlockExists(_U%!256)
  1789. shell_HeapBlockReturn(_U%!256):_U%!256=0
  1790. shell_HeapBlockExists(_U%!&F4)
  1791. shell_HeapBlockReturn(_U%!&F4):_U%!&F4=0
  1792. m%=_U%!&FC
  1793. &400D4,,m%,x%-64,y%:_U%!264=1
  1794. _Q%!0=x%:_Q%!4=y%:
  1795. &45BC5,m%,_Q%:_U%!264=0
  1796. :_U%!24=m%:_U%!36=x%:_U%!40=y%:_U%!52=_U%!28:_U%!56=_U%!32:
  1797. shell_DataSave(_Q%):
  1798. temp%,offset%,blk%,loop%:
  1799. _Q%!4<>_U%!&94
  1800. Moffset%=
  1801. shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
  1802. offset%>-1
  1803. ;blk%=_U%!96+offset%:
  1804. shell_CheckType(_Q%!40,blk%!8,
  1805. shell_TopBitLoadInProgress
  1806. n_Q%!0=256:_Q%!&C=_Q%!8:_Q%!36=-1:_Q%!16=2:$(_Q%+44)=
  1807. shell_GetAppDir+".ScrapFile"+
  1808. &400E7,18,_Q%,_Q%!4
  1809. shell_HeapBlockReturn(_U%!&9C):_U%!&9C=
  1810. shell_HeapBlockFetch((_Q%!0)+8):temp%=_U%!&9C:
  1811. loop%=0
  1812. _Q%!0
  1813. 4:temp%!loop%=_Q%!loop%:
  1814. loop%:_U%!28=_Q%!20:_U%!32=_Q%!24:_U%!&80=0:_U%!&84=_Q%!36:_U%!&98=
  1815. shell_HeapBlockFetch(_Q%!36):_Q%!0=28:_Q%!&C=_Q%!8
  1816. V_Q%!16=6:_Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
  1817. &400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8
  1818. shell_DataSaveAck(_Q%):
  1819. _fullname$,a%,b%,blk%,temp%,void%:a%=0:b%=_Q%?(44+a%):
  1820. b%<>0:_fullname$+=
  1821. (b%):a%+=1:b%=_Q%?(44+a%):
  1822. :offset%=
  1823. shell_GetEventListOffset(_U%!28,_U%!32,_U%+72,24,
  1824. offset%=-1
  1825. offset%=-2
  1826. shell_MessageNoArgs("SHELLMSG05")
  1827. 4blk%=(_U%!72)+offset%:temp%=blk%!20:
  1828. $temp%<>""
  1829. 'void%=
  1830. ("FN"+$temp%+"(_fullname$)")
  1831. shell_HeapBlockExists(blk%!8)
  1832. 8,&A,_fullname$,blk%!&C,,blk%!8,blk%!8+
  1833. shell_HeapBlockInfo(blk%!8)+1
  1834. shell_MessageNoArgs("SHELLMSG21")
  1835. _Q%!36>-1
  1836. _U%!80<>0
  1837. shell_HeapBlockReturn(_U%!80)
  1838. N_U%!80=
  1839. shell_HeapBlockFetch(
  1840. _fullname$+1):temp%=_U%!80:$temp%=_fullname$
  1841. :_Q%!16=3:!_Q%=256:_Q%!20=_U%!&C8:_Q%!24=_U%!&CC:_Q%!40=_U%!&8C:_Q%!36=
  1842. shell_FileLength(_fullname$):_Q%!&C=_Q%!8:$(_Q%+44)=_fullname$+
  1843. (0):_U%!84=_Q%!8:
  1844. &400E7,18,_Q%,_Q%!20,_Q%!24:
  1845. _U%!28<>_U%!20
  1846. shell_CloseWindow(_U%!28)
  1847. &400D4,,-1:
  1848. shell_DataLoad(_Q%,DataOpen%):
  1849. reference%,offset%,blk%,_temp%,type_list%,type%,fname$:type%=_Q%!40:fname$=
  1850. shell_GetString(_Q%+44):
  1851. DataOpen%
  1852. _U%!96<>0
  1853. offset%=0
  1854. offset%=-1
  1855. offset%=
  1856. shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
  1857. offset%=-1
  1858.     <offset%=
  1859. shell_GetEventListOffset(_Q%!20,-1,_U%+96,16,
  1860. offset%>-1
  1861. Cblk%=_U%!96+offset%:
  1862. shell_CheckType(_Q%!40,blk%!8,DataOpen%)
  1863. PReference%=_Q%!&C:_Q%!&C=_Q%!8:_Q%!16=4:
  1864. &400E7,18,_Q%,_Q%!4:
  1865. _U%!&64
  1866. $loadloc%=-1:_U%!&64=_U%!&64
  1867. loadloc%=
  1868. shell_LoadFile(Reference%=_U%!&6C)
  1869. shell_UserFNLoadFile(type%,loadloc%,blk%!8,fname$,_Q%!36,blk%):
  1870. _U%!&9C<>0
  1871. shell_HeapBlockReturn(_U%!&9C):_U%!&9C=0
  1872. shell_DataLoadAck(_Q%):
  1873. shell_RAMFetch(_Q%):
  1874. RAMFetch_buffer%,len_data%,done%:done%=
  1875. _U%!&90>&8000
  1876. 4:_Q%!&C=_Q%!8:_Q%!16=7:len_data%=_U%!&88:
  1877. _U%!&8C=&FF9
  1878. _U%!&90+=4
  1879. (len_data%-_U%!&80)<_Q%!24
  1880. A$_Q%!24=len_data%-_U%!&80:done%=
  1881. &400F1,_U%!&94,_U%!&90+_U%!&80,_Q%!4,_Q%!20,_Q%!24:
  1882. &400E7,17,_Q%,_Q%!4:_U%!&78=_Q%!8:_U%!&80+=_Q%!24:
  1883. done%
  1884. _U%!&80=0
  1885. shell_RAMTransmit(_Q%):
  1886. offset%,blk%,f_name$,temp%:
  1887. _Q%!&C=_U%!&70
  1888. Q$_U%!&80+=_Q%!24:
  1889. _Q%!24<_U%!&84
  1890. offset%=
  1891. shell_GetEventListOffset(_U%!28,_U%!32,_U%+96,16,
  1892. ):blk%=_U%!96+offset%:temp%=_U%!&9C:f_name$=
  1893. shell_GetString(temp%+44):
  1894. shell_UserFNLoadFile(temp%!40,_U%!&98,blk%!8,f_name$,_U%!&84,blk%)
  1895. _U%!&80>_U%!&84
  1896. `;_U%!&98=
  1897. shell_HeapBlockExtend(_U%!&98,_U%!&80,_U%!&84)
  1898. :_Q%!&C=_Q%!8:_Q%!16=6:_Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
  1899. &400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8
  1900. shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
  1901. shell_OK(
  1902. shell_MessageNoArgs("SHELLMSG15"))
  1903. shell_Message_PreQuit(_Q%):
  1904. temp%,quitsender%,blk%,loop%,flagword%:
  1905. _U%!300>0
  1906. blk%=
  1907. shell_HeapBlockFetch(256):
  1908. loop%=0
  1909. _Q%!0
  1910. 4:blk%!loop%=_Q%!loop%:
  1911. loop%:temp%=_U%!300:quitsender%=blk%!4:
  1912. !blk%<24
  1913. flagword%=0
  1914. flagword%=blk%!20
  1915. }Cblk%!&C=blk%!8:
  1916. &400E7,19,blk%,quitsender%:
  1917. ("FN"+$temp%)<>0
  1918. flagword%
  1919. _closedown%=
  1920. !blk%=24:blk%!24=508:
  1921. &400E7,8,blk%,quitsender%:_closedown%=
  1922. shell_HeapBlockReturn(blk%)
  1923. shell_Message_SaveDesktop(Q%):
  1924. boot$:boot$="Run "+
  1925. shell_GetAppDir+
  1926. &C,2,Q%!20,boot$,
  1927. boot$:
  1928. shell_Message_Shutdown(_Q%):
  1929. _U%!312>0
  1930. shell_Tracef0("Message_Shutdown:Shutdown message received"):temp%=_U%!312:void%=
  1931. ("FN"+$temp%)
  1932. shell_InteractiveHelp(_Q%):
  1933. tag$,mess$,validation$,pos1%,pos2%,help$,i_blk%:i_blk%=
  1934. shell_HeapBlockFetch(&C):
  1935. &400D6,_Q%!32,i_blk%,&3F0000,&C<<16:
  1936. !i_blk%<>-1
  1937. +tag$=
  1938. shell_IconGetData(_Q%!32,!i_blk%)
  1939. shell_HeapBlockReturn(i_blk%):
  1940. tag$=""
  1941. tag$=
  1942. shell_GetEventHandler(_Q%!32,_Q%!36,8)
  1943. Ivalidation$=
  1944. shell_IconGetValidation(_Q%!32,_Q%!36):
  1945. validation$<>""
  1946. shell_StringUpperCase(
  1947. validation$,1))="I"
  1948. %pos1%=
  1949. validation$,";"):
  1950. pos1%=0
  1951. tag$=
  1952. validation$,2)
  1953. tag$=
  1954. validation$,2,pos1%-2)
  1955. pos1%=
  1956. shell_StringUpperCase(validation$),
  1957. shell_StringUpperCase(";i")):pos2%=
  1958. shell_StringUpperCase(validation$),
  1959. shell_StringUpperCase(";"),pos1%+1):
  1960. pos1%>0
  1961. pos2%>0
  1962. ,tag$=
  1963. validation$,pos1%+2,pos2%-pos1%-2)
  1964. tag$=
  1965. validation$,pos1%+2)
  1966. tag$<>""
  1967. _Q%!16=&503:_Q%!&C=_Q%!8:mess$=
  1968. shell_MessageLookup(tag$,"",""):mess$=
  1969. shell_MessageExpand(mess$):$(_Q%+20)=mess$:!_Q%=(
  1970. mess$+25)
  1971. &400E7,17,_Q%,_Q%!4
  1972. shell_MenuWarning(_Q%):
  1973. fn$,menu_buffer%,x%,y%,void%,_temp%,a%,warn_fn$,item_addr%,blk%:x%=_Q%!24:y%=_Q%!28:_U%!264=0:
  1974. _U%!20<>0
  1975. %void%=
  1976. shell_DeleteWindow(_U%!20)
  1977. _Q%!20
  1978. _U%!&E4:
  1979. shell_WindowRetitle(_U%!&E4,
  1980. shell_MessageNoArgs("warning")):
  1981. shell_IconPutData(_U%!&E4,1,
  1982. shell_MessageNoArgs("SHELLMSG07"),0):
  1983. &400E8,,_U%!&E4,x%,y%
  1984. item_addr%=
  1985. shell_MenuGetItemAddress(_U%!24,_Q%+32):
  1986. shell_HeapBlockExists(item_addr%!4)
  1987. shell_MenuWarnDBox(item_addr%,x%,y%)
  1988. blk%=
  1989. shell_HeapBlockFetch(32):
  1990. &45BC4,_U%!24,_Q%+32
  1991. ,,blk%:
  1992. shell_FindMenuWarnEvent(blk%!8,warn_fn$,sel_fn$):
  1993. shell_HeapBlockReturn(blk%):
  1994. shell_MenuWarnSubMenu(_Q%!20,x%,y%,warn_fn$,sel_fn$)
  1995. shell_Message_ModeChange(_Q%):
  1996. offset%,ctr%,sw_list%,w_blk%:sw_list%=_U%!&B8:
  1997. _U%!&A0>0
  1998. shell_Tracef0("Message_ModeChange:ModeChange message received"):temp%=_U%!&A0:void%=
  1999. ("FN"+$temp%)
  2000. :w_blk%=
  2001. shell_HeapBlockFetch(&64):
  2002. sw_list%<>0
  2003. sw_list%!ctr%<>-1:offset%=
  2004. shell_GetEventListOffset(sw_list%!ctr%,-1,_U%+92,24,
  2005. offset%>-1
  2006. shell_WindowIsOpen(sw_list%!ctr%)
  2007. P!w_blk%=sw_list%!ctr%:
  2008. &400C6,,w_blk%:
  2009. shell_OpenWindow(sw_list%!ctr%,0,-1)
  2010. :ctr%+=4:
  2011. shell_HeapBlockReturn(w_blk%):
  2012. shell_GetString(Address%):
  2013. String$,Len%:
  2014. ((Address%?Len%)>31
  2015. Len%<&FF):String$+=
  2016. (Address%?Len%):Len%+=1:
  2017. :=String$
  2018. shell_StrongHlpMsg(msg$):
  2019. shell_BroadcastMessage(&43B00,msg$):
  2020. shell_HelpWord(word$):
  2021. read%,temp%,buff%:buff%=
  2022. shell_HeapBlockFetch(512):
  2023. _U%!&D0=-1
  2024. shell_OSVarExists(buff%,"StrongHelp$Dir")
  2025. &600DE,"<StrongHelp$Dir>":
  2026. _U%!&D8<>0
  2027. shell_HeapBlockReturn(_U%!&D8)
  2028. F_U%!&D8=
  2029. shell_HeapBlockFetch(
  2030. word$+1):temp%=_U%!&D8:$temp%=word$
  2031. shell_HeapBlockReturn(buff%):
  2032. shell_OK(
  2033. shell_MessageNoArgs("SHELLMSG11"))
  2034. shell_StrongHlpMsg("Help_Word "+word$)
  2035. shell_HeapBlockReturn(buff%):
  2036. shell_ScanForHelp:
  2037. wrk%,owner_taskhandle%:wrk%=
  2038. shell_HeapBlockFetch(256):
  2039. :wrk%!&C=0:
  2040. &400E7,19,wrk%,-2,_U%!&D4
  2041. ,,owner_taskhandle%:_U%!&D4=_U%!&D4+1:
  2042. owner_taskhandle%<>-1
  2043. (_U%!&D4)>64:
  2044. owner_taskhandle%<>-1
  2045. BSwrk%!0=24:wrk%!&C=0:wrk%!16=&400C6:wrk%!20=owner_taskhandle%:
  2046. &400E7,17,wrk%,0
  2047. shell_HeapBlockReturn(wrk%):
  2048. shell_HandleUnknownMessage2(_Q%):
  2049. message$:
  2050. _Q%!16
  2051. &43B00:message$=$(_Q%+20):
  2052. message$,30)="EvntShellLib:ShellDBug started"
  2053. _U%!&64
  2054. Ur_U%!&64=(_U%!&64
  2055. 1<<4):
  2056. shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+
  2057. shell_GetAppName)
  2058. message$,25)="EvntShellLib:TraceInitAck"
  2059. _U%!&64=(_U%!&64
  2060. 1<<4)
  2061. message$,20)="EvntShellLib:TraceOn"
  2062. shell_TraceOn
  2063. message$,21)="EvntShellLib:TraceOff"
  2064. shell_TraceOff
  2065. message$,28)="EvntShellLib:ListClickSelect"
  2066. shell_ListClickSelect
  2067. message$,28)="EvntShellLib:ListClickAdjust"
  2068. shell_ListClickAdjust
  2069. message$,25)="EvntShellLib:ListHelpTags"
  2070. shell_ListHelpTags
  2071. shell_HandleUnknownMessage(_Q%):
  2072. shell_AckDataLoad(_Q%):
  2073. _Q%!&C<>_U%!84
  2074. &20008,6,"<Wimp$Scrap>":
  2075. &FF,"Data Transfer failed: Receiver died"
  2076. shell_AckRAMFetch(_Q%):
  2077. Exist%,temp%:temp%=_U%!&9C:
  2078. _Q%!&C<>_U%!&70
  2079. _U%!&80=0
  2080. &20023,"Wimp$Scrap",,-1,0,3
  2081. ,,Exist%:
  2082. Exist%<>0
  2083. $(temp%+44)="<Wimp$Scrap>"+
  2084. (0):temp%!0=(49+
  2085. shell_GetString(temp%+44)))
  2086. 3:temp%!&C=temp%!8:temp%!16=2:temp%!36=-1:
  2087. &400E7,18,temp%,temp%!4:_U%!&6C=temp%!8
  2088. shell_OK(
  2089. shell_MessageNoArgs("SHELLMSG14"))
  2090. shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
  2091. shell_OK("SHELLMSG06")
  2092. shell_LoseFonts:
  2093. loop%,temp%:temp%=_U%!&E8:
  2094. loop%=0
  2095. temp%?loop%>0:
  2096. &40082,loop%:temp%?loop%-=1:
  2097. loop%:
  2098. shell_IconSetState(WindowHandle%,IconHandle%,EorWord%,ClearWord%):
  2099. icon_blk%:icon_blk%=
  2100. shell_HeapBlockFetch(16):!icon_blk%=WindowHandle%:icon_blk%!4=IconHandle%:icon_blk%!8=EorWord%:icon_blk%!&C=ClearWord%:
  2101. &400CD,,icon_blk%
  2102. shell_HeapBlockReturn(icon_blk%):
  2103. shell_UpdateWindowHandle(old_handle%,new_handle%):
  2104. new_handle%<>old_handle%
  2105. _U%!28=old_handle%
  2106. _U%!28=new_handle%
  2107. shell_FixEventBlock(old_handle%,new_handle%,_U%!&C,48):
  2108. shell_FixEventBlock(old_handle%,new_handle%,_U%!96,16):
  2109. shell_FixEventBlock(old_handle%,new_handle%,_U%!72,24):
  2110. shell_FixEventBlock(old_handle%,new_handle%,_U%!92,24)
  2111. shell_FixEventBlock(old_handle%,new_handle%,_U%!&68,16):
  2112. shell_UpdateStaticWindows(old_handle%,new_handle%)
  2113. shell_StringPadLeading(string$,char$,length%):
  2114. (string$)<length%:string$=
  2115. length%-
  2116. (string$),char$)+string$:
  2117. :=string$
  2118. shell_StringUpperCase(string$):
  2119. loop%:
  2120. (string$)>0
  2121. loop%=1
  2122. (string$):
  2123. string$,loop%,1)>="a"
  2124. string$,loop%,1)<="z"
  2125. string$,loop%,1)=
  2126. string$,loop%,1))
  2127. loop%
  2128. :=string$
  2129. shell_IconDeselect(WindowHandle%,IconHandle%):
  2130. shell_IconSetState(WindowHandle%,IconHandle%,0,&200000):
  2131. shell_IconSelect(WindowHandle%,IconHandle%):
  2132. shell_IconSetState(WindowHandle%,IconHandle%,&200000,&200000):
  2133. shell_CheckType(type%,type_list%,DataOpen%):
  2134. Ok%,ctr%,found%,temp%,topbit_load%:ctr%=0:found%=-1:topbit_load%=
  2135. _U%!&64
  2136. _U%!&64=_U%!&64
  2137. type_list%!ctr%<>-1:temp%=type_list%!ctr%:
  2138. temp%
  2139. 1<<31
  2140. $temp%=temp%
  2141. 1<<31:topbit_load%=
  2142. topbit_load%=
  2143. temp%=type%
  2144. found%=ctr%:
  2145. topbit_load%
  2146. _U%!&64=_U%!&64
  2147. :ctr%+=4:
  2148. DataOpen%
  2149. (type%>=4096)
  2150. found%=-1
  2151. found%<>-1
  2152. shell_TopBitLoadInProgress:
  2153. _U%!&64
  2154. shell_LoadFile(Scrap%):
  2155. Name$,FileSize%,Flags%,loadloc%:Name$=
  2156. shell_GetString(_Q%+44):FileSize%=
  2157. shell_FileLength(Name$):
  2158. FileSize%<0
  2159. shell_OK(
  2160. shell_MessageNoArgs("SHELLMSG16"))
  2161. iloadloc%=
  2162. shell_HeapBlockFetch(FileSize%):
  2163. &20008,16,Name$,loadloc%,0
  2164. ;Flags%:
  2165. shell_VFlag(Flags%)
  2166. shell_HeapBlockReturn(loadloc%):
  2167. shell_OK(
  2168. shell_MessageNoArgs("SHELLMSG17"))
  2169. :=loadloc%
  2170. shell_UserFNLoadFile(type%,loadloc%,type_list%,_filename$,_file_size%,blk%):
  2171. ctr%,found%,temp%,void%:ctr%=0:found%=-1:
  2172. type_list%!ctr%<>-1:temp%=type_list%!ctr%:
  2173. temp%
  2174. 1<<31
  2175. temp%=temp%
  2176. 1<<31
  2177. temp%=type%
  2178. found%=ctr%
  2179. tctr%+=4:
  2180. :temp%=blk%!&C:void%=
  2181. ("FN"+$(temp%!found%)+"("+
  2182. loadloc%+","+
  2183. type%+",_filename$,"+
  2184. _file_size%+")"):
  2185. shell_IconGetValidation(wh%,ih%):
  2186. blk%,validation$,flags%:
  2187. ih%=-1
  2188. svalidation$="":blk%=
  2189. shell_HeapBlockFetch(&64):blk%!0=wh%:blk%!4=ih%:
  2190. &400CE,,blk%:flags%=blk%!24:
  2191. flags%
  2192. blk%!32>0
  2193. validation$=$(blk%!32)
  2194. shell_HeapBlockReturn(blk%):=validation$
  2195. shell_MessageExpand(h$):
  2196. s$,m$,index%:s$="":
  2197. h$,"\")>0:index%=
  2198. h$,"\"):s$+=
  2199. h$,index%-1):m$=
  2200. h$,index%+1,1):h$=
  2201. h$,index%+2):
  2202. "A":s$+="Click ADJUST to"
  2203. "a":s$+="ADJUST"
  2204. "D":s$+="Drag with SELECT to"
  2205. "d":s$+="Drag with ADJUST to"
  2206. "G":s$+="This option is greyed out because"
  2207. "R":s$+="Move the pointer right"
  2208. "S":s$+="Click SELECT to"
  2209. "s":s$+="SELECT"
  2210. "T":s$+="This is the"
  2211. "W":s$+="This window is"
  2212. "w":s$+="window"
  2213. s$+="\"+m$
  2214. :=s$+h$
  2215. shell_DeleteWindow(handle%):
  2216. win_blk%:win_blk%=
  2217. shell_HeapBlockFetch(20):
  2218. handle%<>0
  2219. oktodeletew(handle%)
  2220. shell_EventDeleteAll(handle%):
  2221. handle%=_U%!20
  2222. _U%!20=0
  2223. K=offset%=
  2224. shell_SearchStatic(_U%!&B8,handle%):
  2225. offset%>-1
  2226. M#temp%=_U%!&B8+offset%:temp%!0=0
  2227. :win_blk%!0=handle%:
  2228. &400C3,,win_blk%:handle%=0
  2229. shell_HeapBlockReturn(win_blk%):=handle%
  2230. shell_WindowRetitle(
  2231. whandle%,title$):
  2232. temp%,win_blk%,handle%,t_buffer_len%:win_blk%=
  2233. shell_HeapBlockFetch(6000):win_blk%!0=whandle%:
  2234. &400CC,,win_blk%:
  2235. ((win_blk%!60)
  2236. 256)=0
  2237. `ltemp%=win_blk%+76:$temp%=
  2238. title$,&B):
  2239. &400C3,,win_blk%:
  2240. &400C1,,win_blk%+4
  2241. handle%:
  2242. handle%<>whandle%
  2243. shell_UpdateWindowHandle(whandle%,handle%):whandle%=handle%
  2244. t_buffer_len%=win_blk%!84:$(!(win_blk%+76))=
  2245. title$,t_buffer_len%-1):
  2246. ((win_blk%!32)
  2247. (1<<16))<>0
  2248. &400D1,-1,win_blk%!4,win_blk%!16,win_blk%!&C,win_blk%!16+44
  2249. shell_HeapBlockReturn(win_blk%)
  2250. shell_MenuGetItemAddress(menu%,selection%):
  2251. ctr%,item_addr%:
  2252. &45BC7,menu%
  2253. menu%:
  2254. :item_addr%=menu%+28+((selection%!ctr%)*24):menu%=item_addr%!4:ctr%+=4:
  2255. selection%!ctr%=-1:=item_addr%
  2256. shell_MenuWarnDBox(addr%,x%,y%):
  2257. temp%,h%,void%:
  2258. Dtemp%=addr%!4:
  2259. shell_CreateWindow($temp%!0,h%):
  2260. $temp%!4<>""
  2261. &void%=
  2262. ("FN"+$temp%!4+"("+
  2263. h%+")")
  2264. $temp%!8<>""
  2265. &void%=
  2266. ("FN"+$temp%!8+"("+
  2267. h%+")")
  2268. &400E8,,h%,x%,y%:_U%!20=h%:
  2269. shell_FindMenuWarnEvent(item_handle%,
  2270. warn_fn$,
  2271. sel_fn$):
  2272. result%,e_list%,temp%,offset%,found%,list_size%,temp2%,ctr%:
  2273. submenu%:submenu%=0:e_list%=_U%!&DC:offset%=0:found%=
  2274. :warn_fn$="":submenu%=0:
  2275. shell_HeapBlockExists(e_list%)
  2276. :ctr%+=4:
  2277. e_list%!ctr%=-1:list_size%=ctr%:ctr%=0:
  2278. :temp%=!(e_list%+offset%+0):
  2279. temp%<>-1
  2280. temp%=item_handle%
  2281. found%=
  2282. :temp2%=e_list%!(offset%+4):warn_fn$=$temp2%:submenu%=e_list%!(offset%+8):temp2%=e_list%!(offset%+&C):sel_fn$=$temp2%
  2283. :offset%+=16
  2284. offset%=list_size%
  2285. found%
  2286. offset%>=list_size%
  2287. warn_fn$="":sel_fn$=""
  2288. shell_MenuWarnSubMenu(s_menu%,x%,y%,warn_fn$,sel_fn$):
  2289. void%,temp%,f_menu%,ctr%:_shell_FontMenuSelFN$=sel_fn$:
  2290. shell_HeapBlockExists(_U%!&E0)
  2291. shell_HeapBlockReturn(_U%!&E0)
  2292. [_U%!&E0=
  2293. shell_HeapBlockFetch(
  2294. warn_fn$+1):temp%=_U%!&E0:$temp%=warn_fn$:
  2295. warn_fn$<>""
  2296. ,void%=
  2297. ("FN"+warn_fn$+"(_U%!52,_U%!56)")
  2298. &400E8,,s_menu%,x%,y%:
  2299. shell_TraceOn:_U%!48=
  2300. shell_BroadcastMessage(&43B00,"ShellDBug:TraceOn"):
  2301. shell_TraceOff:_U%!48=
  2302. shell_BroadcastMessage(&43B00,"ShellDBug:TraceOff"):
  2303. shell_ListClickSelect:
  2304. e_list%,ptr%,list_size%,temp%,temp2%:e_list%=_U%!&C:list_size%=
  2305. shell_HeapBlockInfo(e_list%):ptr%=0:
  2306. :temp%=e_list%!(ptr%+20):temp2%=e_list%+ptr%:
  2307. shell_HeapBlockExists(temp%)
  2308. $temp%<>""
  2309. :ptr%+=48:
  2310. (ptr%>=list_size%):
  2311. shell_ListClickAdjust:
  2312. e_list%,ptr%,list_size%,temp%,temp2%:e_list%=_U%!&C:list_size%=
  2313. shell_HeapBlockInfo(e_list%):ptr%=0:
  2314. :temp%=e_list%!(ptr%+24):temp2%=e_list%+ptr%:
  2315. shell_HeapBlockExists(temp%)
  2316. $temp%<>""
  2317. :ptr%+=48:
  2318. (ptr%>=list_size%):
  2319. shell_ListHelpTags:
  2320. e_list%,ptr%,list_size%,temp%,temp2%:e_list%=_U%!&C:list_size%=
  2321. shell_HeapBlockInfo(e_list%):ptr%=0:
  2322. :temp%=e_list%!(ptr%+44):temp2%=e_list%+ptr%:
  2323. shell_HeapBlockExists(temp%)
  2324. $temp%<>""
  2325. :ptr%+=48:
  2326. (ptr%>=list_size%):
  2327. shell_HandleUnknownMessage(_Q%):
  2328. shell_FixEventBlock(old_handle%,new_handle%,event_list%,offset%):
  2329. ptr%,list_size%:
  2330. shell_HeapBlockExists(event_list%)
  2331. Ulist_size%=
  2332. shell_HeapBlockInfo(event_list%)-8:
  2333. (event_list%!ptr%=old_handle%)
  2334.  event_list%!ptr%=new_handle%
  2335. :ptr%+=offset%:
  2336. (ptr%>=list_size%)
  2337. shell_UpdateStaticWindows(old_handle%,new_handle%):
  2338. offset%,w_list%:w_list%=_U%!&B8:offset%=
  2339. shell_SearchStatic(_U%!&B8,old_handle%):w_list%!offset%=new_handle%:
  2340. shell_VFlag(Flags%):=((Flags%
  2341. 1)=1)
  2342. oktodeletew(handle%):=-1
  2343. shell_EventDeleteAll(wh%):
  2344. ptr%,menu%,found%,list_size%,event_list%,loop%:ptr%=0:menu%=0:found%=
  2345. wh%=-1
  2346. wh%=-2
  2347. [list_size%=
  2348. shell_HeapBlockInfo(_U%!&C)-8:event_list%=_U%!&C:
  2349. (event_list%!ptr%=wh%)
  2350. found%=
  2351. ptr%+=48
  2352. (ptr%>=list_size%
  2353. found%):
  2354. found%
  2355. uevent_list%!(ptr%+0)=0:event_list%!(ptr%+4)=0:event_list%!(ptr%+8)=0:
  2356. loop%=&C
  2357. event_list%!(ptr%+loop%)<>0
  2358. shell_HeapBlockReturn(event_list%!(ptr%+loop%)):event_list%!(ptr%+loop%)=0
  2359. loop%
  2360. shell_Tracef0("EventDeleteAll:wh%=&"+
  2361. ~wh%):
  2362. shell_DeleteEventDataSave(wh%,-1):
  2363. shell_DeleteEventBump(wh%,-1):
  2364. shell_DeleteEventDataSave(wh%,ih%):
  2365. offset%,blk%,list_size%:
  2366. :offset%=
  2367. shell_GetEventListOffset(wh%,ih%,_U%+72,24,
  2368. offset%>=0
  2369. ih%=-1
  2370. shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (all events for window handle &"+
  2371. ~wh%+")")
  2372. shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (window handle was &"+
  2373. ~wh%+" icon handle was "+
  2374. ih%+")")
  2375. :list_size%=
  2376. shell_HeapBlockInfo(_U%!72)-8:
  2377. offset%=list_size%-24
  2378. offset%=0
  2379. shell_HeapBlockReturn(_U%!72):_U%!72=0
  2380. _U%!72=
  2381. shell_HeapBlockExtend(_U%!72,-24)
  2382. blk%=event_list%+offset%:blk%!0=0:blk%!4=0:blk%!8=0:blk%!&C=0:blk%!16=0:
  2383. shell_HeapBlockReturn(blk%!20):blk%!20=0
  2384. offset%<0:
  2385. shell_DeleteEventBump(wh%,ih%):
  2386. offset%,blk%,list_size%,event_list%,temp%:event_list%=_U%!&68:
  2387. :offset%=
  2388. shell_GetEventListOffset(wh%,ih%,_U%+&68,16,
  2389. shell_Tracef0("DeleteEventBump:offset%="+
  2390. offset%):
  2391. offset%>=0
  2392. ih%=-1
  2393. shell_Tracef0("DeleteEventBump:Deleting Bump Event (all events for window handle &"+
  2394. ~wh%+")")
  2395. shell_Tracef0("DeleteEventBump:Deleting Bump Event (window handle was &"+
  2396. ~wh%+" icon handle was "+
  2397. ih%+")")
  2398. :list_size%=
  2399. shell_HeapBlockInfo(_U%!&68)-8:
  2400. offset%=list_size%-16
  2401. offset%=0
  2402. info_blk%=event_list%!&C:temp%=info_blk%!&C:
  2403. shell_HeapBlockReturn(temp%!&C):
  2404. shell_HeapBlockReturn(temp%!16):
  2405. shell_HeapBlockReturn(temp%):
  2406. shell_HeapBlockReturn(_U%!&68):_U%!&68=0:
  2407. shell_Tracef0("DeleteEventDataSave:No Bump events now registered")
  2408. _U%!&68=
  2409. shell_HeapBlockExtend(_U%!&68,-16)
  2410. blk%=event_list%+offset%:blk%!0=0:blk%!4=0:blk%!8=0:info_blk%=blk%!&C:
  2411. shell_HeapBlockReturn(info_blk%!&C):
  2412. shell_HeapBlockReturn(info_blk%!16):
  2413. shell_HeapBlockReturn(info_blk%)
  2414. offset%<0:
  2415.